当前位置: 首页 > 知识库问答 >
问题:

在Spring Boot中动态配置DataSourceBuilder url

郎思远
2023-03-14

我在application.properties文件中定义了以下属性。

sample.db.serverName=10.10.10.10
sample.db.serverPort=1234
sample.db.databaseName=sampleDb

现在我使用DataSourceBuilder,但我需要使用所有可用信息构建url,因为它只有url参数。

我不知道如何将属性读入POJO并在DataSource类中获取句柄

public DataSource dataSource()
{
   //handle for POJO
   //StringBuilder to build the url
   return DataSourceBuilder.create.url(str.toString()).build();
}

附言:我提到了这个链接,但它与我的问题不同。

共有2个答案

裘光启
2023-03-14

使用@Bean注释您的方法,并使用@Value注释将属性传递给它:

@Value("${sample.db.serverName}") private String serverName;
// .. repeat for other properties ...
@Bean public DataSource dataSource() {
    String url = // build URL from serverName field and other fields
    // create DataSource instance and return it
}

您还可以对方法参数使用注释,而不仅仅是字段,但如果您从代码中调用您的dataSource()方法,它就会变得复杂起来。

刘丰羽
2023-03-14

您可以创建配置属性类(简单POJO):

@ConfigurationProperties(prefix = "sample.db")
public class DbProperties {
    private String serverName;
    private String serverPort;
    private String databaseName;

    // getters and setters
}

之后,您可以告诉Spring创建此类的实例,并从属性文件中填充属性:

@EnableConfigurationProperties(value = DbProperties.class)

最后,您可以将它们自动连接到创建数据源的方法中:

@Configuration
@EnableConfigurationProperties(value = DbProperties.class)
public class DatasourceConfig {

    @Bean
    public DataSource dataSource(final DbProperties properties) {
        // do whatever you need
        return DataSourceBuilder.create.url(str.toString()).build();
    }
}
 类似资料:
  • 我知道在DispatcherServlet之外使用请求范围bean需要一些配置,并且已经阅读了http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/beans.html#beans-factory-scopes-oth,但是还没有成功: 对于Servlet3.0+,这可以通过WebApplicationIni

  • 问题内容: 我正在尝试使用Maven 3 在Spring Boot应用程序中设置活动配置文件。在我的pom.xml中,将默认的活动配置文件和属性spring.profiles.active设置 为development: 但是每次我运行应用程序时,都会在日志中收到以下消息: 并且将SpringBoot配置文件设置为默认值(读取application.properties而不是application

  • 4.1 根据条件的自动配置 @conditional是基于条件的自动配置,一般配合Condition接口一起使用,只有接口实现类返回true,才装配,否则不装配. 用实现了Condition接口的类传入@Conditional中 @Conditional可以标记在配置类的方法中,也可以标记在配置类上.标记的位置不同,作用域不同. @Conditional可以传入多个实现了condition接口的类

  • 我在学习Spring Boot时遇到了一些编码问题;我想添加一个像Spring3.x那样的CharacterEncodingFilter。就像这样:

  • 配置中心(v2.7.0)在Dubbo中承担两个职责: 外部化配置。启动配置的集中式存储 (简单理解为dubbo.properties的外部化存储)。 服务治理。服务治理规则的存储与通知。 启用动态配置(以Zookeeper为例,可查看动态配置配置项详解): <dubbo:config-center address="zookeeper://127.0.0.1:2181"/> 或者 dubbo.c

  • cmf_set_dynamic_config($data) 功能 设置动态配置 参数 $data: array 要设置的数据,格式["cmf_default_theme"=>'simpleboot3'] 返回 boolean