springboot整合couchbase

springboot整合couchbase

couchbase是一个非关系型数据库,它实际上是由couchdb+membase组成,所以它既能像couchdb那样存储json文档,也能像membase那样高速存储键值对。主要有以下几个特点:
速度快
由于是放在内存中的数据库,所有的读写操作都是直接操作内存,因此速度非常快。
高可用
主要从两个方面,一个是它自带集群方案,支持多副本模式,另一个是它自带持久化方案,可以设置定时把数据异步写到文件系统上。
配置使用方便
安装后自带web管理台,可以在管理台上对集群、桶、索引、搜索等进行管理和操作,大量减轻运维的工作,使用简单
最近在做couchbase发现教程很少
1.
Docker部署CouchBase分布式数据库:https://www.cnblogs.com/zhangyunyun/p/12363402.html
2.pom.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.3.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-couchbase</artifactId>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
    <dependency>
      <groupId>javax.validation</groupId>
      <artifactId>validation-api</artifactId>
      <version>2.0.0.CR3</version>
    </dependency>
  </dependencies>

  <build>
    <finalName>${artifactId}</finalName>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>

3.application.properties

server.port=9099
spring.couchbase.bootstrap-hosts=192.168.221.136
spring.couchbase.username=admin
spring.couchbase.password=123456
spring.couchbase.bucket.name=ls
spring.couchbase.bucket.password=123456
spring.data.couchbase.auto-index=true
spring.couchbase.env.timeouts.connect=30000
spring.couchbase.env.timeouts.view=15000
spring.couchbase.env.timeouts.query=15000
logging.level.org.springframework.data=INFO
logging.level.com.couchbase=INFO
logging.level.com.github.corneil=DEBUG

4.CouchbaseConfig.java

@Configuration
@EnableCouchbaseRepositories("com.ls.repositorys")
public class CouchbaseConfig extends AbstractCouchbaseConfiguration {
	private final static Logger logger = LoggerFactory.getLogger(CouchbaseConfig.class);

	@Value("${spring.couchbase.bootstrap-hosts}")
	private String host;

	@Value("${spring.couchbase.bucket.password}")
	private String password;
	@Value("${spring.couchbase.bucket.name}")
	private String name;

	@Override
	protected List<String> getBootstrapHosts() {
		logger.info("couchbase.host:" + host);
		StringTokenizer tokens = new StringTokenizer(host, ", ");
		List<String> hosts = new ArrayList<String>();
		while (tokens.hasMoreTokens()) {
			hosts.add(tokens.nextToken());
		}
		return hosts;
	}

	@Override
	public CouchbaseTemplate couchbaseTemplate() throws Exception {

		CouchbaseTemplate template = super.couchbaseTemplate();
		template.setWriteResultChecking(WriteResultChecking.EXCEPTION);
		template.setDefaultConsistency(Consistency.READ_YOUR_OWN_WRITES);
		return template;
	}

	@Override
	protected String getBucketName() {
		return name;
	}

	@Override
	protected String getBucketPassword() {
		return password;
	}

	@Override
	protected CouchbaseEnvironment getEnvironment() {
		CouchbaseEnvironment env = DefaultCouchbaseEnvironment.builder()
				.connectTimeout(100000) //10000ms = 10s, default is 5s
				.build();
		return env;
	}

	@Bean(destroyMethod = "disconnect")
	public Cluster cluster() {
		// connect to the couchbase-server running on your local machine
		return CouchbaseCluster.create(getEnvironment(),getBootstrapHosts());
	}

	@Bean(destroyMethod = "close")
	public Bucket bucket() {
		// connect to the bucket named 'default' (which must exist on your Couchbase server)
		// every cache related element will use this bucket
		return cluster().openBucket(name, password);
	}

	@Override
	public IndexManager indexManager() {
		return new IndexManager(true, true, true);
	}
}

@N1qlPrimaryIndexed
@ViewIndexed(designDoc = "building")
public interface BuildingRepository extends CouchbasePagingAndSortingRepository<Building, String> {

    List<Building> findByCompanyId(String companyId);

    Page<Building> findByCompanyIdAndNameLikeOrderByName(String companyId, String name,
        Pageable pageable);

    @Query("#{#n1ql.selectEntity} where #{#n1ql.filter} and companyId = $1 and $2 within #{#n1ql.bucket}")
    Building findByCompanyAndAreaId(String companyId, String areaId);

    @Query("#{#n1ql.selectEntity} where #{#n1ql.filter} AND ANY phone IN phoneNumbers SATISFIES phone = $1 END")
    List<Building> findByPhoneNumber(String telephoneNumber);

    @Query("SELECT COUNT(*) AS count FROM #{#n1ql.bucket} WHERE #{#n1ql.filter} and companyId = $1")
    Long countBuildings(String companyId);


    Building findBuildingById(String buildingId );

TestController

 @Autowired
  private BuildingService buildingService;

  @GetMapping("/testSave")
  public String testSave() {
    val building = new Building(BUILDING_1, "couchbase",
        COMPANY_2, new ArrayList<>(), new ArrayList<>());
    buildingService.save(building);

    Building newBuilding = buildingService.findById(BUILDING_1);
    return building.toString();
  }

在这里插入图片描述
更多学习请看官网:https://github.com/spring-projects/spring-data-couchbase
参考:couchbase介绍与实践(一):https://juejin.im/post/5ad53562f265da238b7e7f3c
参考:https://github.com/deniswsrosa/couchbase-spring-data-sample

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值