使用数据形式application.properties在Spring Boot中创建Couchbase配置类?

时间:2020-06-25 17:33:01

标签: java spring-boot couchbase spring-data-couchbase

开始在春季启动时使用Couchbase Java SDK,以访问群集,存储桶和集合(SDK 3. +),我创建了一个@Configuration类,如下所示:

@Configuration
public class Database {

Cluster cluster = Cluster.connect("localhost", "Administrator", "password");
Bucket bucket = cluster.bucket("blackbox");

@Bean
public Collection collection() {
    return this.bucket.defaultCollection();
}

@Bean
public Bucket bucket() {
    return this.bucket;
}

@Bean
public Cluster cluster() {
    return this.cluster;
}

需要我使用application.properties文件中的数据。我尝试自动装配环境以获取没有运气的属性,以及使用@Value的多种方式也会给我带来错误。有没有一种方法可以通过从文件中获取值并具有可以自动装配的Bean集群来配置与数据库的连接?还是我的解决方案完全错误?

以下是尝试使用@Value创建bean集群的方法:

@Bean
public Cluster cluster(@Value("${host}" String host,@Value("${user}" String user,
@Value("${pass}" String pass) {
    return Cluster.connect(host,user,pass);
}

2 个答案:

答案 0 :(得分:1)

我将类更改为以下类,并使其正常运行,但我不确定这是否是正确的解决方案:

@Autowired
private Environment env;

@Bean
public Collection collection() {
    return bucket().defaultCollection();
}

@Bean
public Bucket bucket() {
    return cluster().bucket(env.getProperty("storage.bucket"));
}

@Bean
public Cluster cluster() {
    return Cluster.connect(env.getProperty("storage.host"),
            env.getProperty("storage.username"), env.getProperty("storage.password"));
}

答案 1 :(得分:0)

首先,您应该创建“ couchbaseProperties”类。

import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "couchbase")
@Getter
@Setter
public class CouchbaseProperties {
    private String host;
    private String userName;
    private String password;
    private String bucketName;
}

然后您应该在application.properties文件中提供参数。

couchbase.host=localhost
couchbase.userName=Administrator
couchbase.password=password
couchbase.bucketName=blackbox

最后,您可以在数据库类中使用数据。

    @Configuration
    public class Database {
    
        private final CouchbaseProperties couchbaseProperties;
    
        public Database(CouchbaseProperties couchbaseProperties) {
            this.couchbaseProperties = couchbaseProperties;
        }
        @Bean
        public Cluster cluster() {
            return Cluster.connect(couchbaseProperties.getHost(), ClusterOptions
                    .clusterOptions(couchbaseProperties.getUserName(), 
                     couchbaseProperties.getPassword()));
        }
   }