【问题标题】:Creating a Couchbase configuration class in Spring Boot, using data form application.properties?在 Spring Boot 中创建一个 Couchbase 配置类,使用数据表单 application.properties?
【发布时间】:2020-06-25 17:33:01
【问题描述】:

开始使用带有spring boot的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);
}

【问题讨论】:

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


    【解决方案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"));
    }
    

    【讨论】:

      【解决方案2】:

      首先你应该创建 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
      

      终于可以在Database类中使用数据了。

          @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()));
              }
         }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-14
        • 2017-07-16
        • 1970-01-01
        • 2018-10-24
        • 2015-05-26
        • 1970-01-01
        • 1970-01-01
        • 2014-10-11
        相关资源
        最近更新 更多