Spring 引导 application.properties 命名

Spring boot application.properties naming

我正在了解 springboot 并尝试连接到 DB2 数据库。我让它工作得很好。

以下是我的工作 DB2 属性:

spring.datasource.url=jdbc:db2://server:port/database:currentSchema=schema-name;
spring.datasource.username=user1
spring.datasource.password=password1

但我将它们重命名为以“db2”而不是“spring”开头,例如:

db2.datasource.url=jdbc:db2://server:port/database:currentSchema=schema-name;
db2.datasource.username=user1
db2.datasource.password=password1

我的应用程序仍在运行,但是,当我这样做时,我的控制器不再像重命名之前那样 return 结果。

我问这个的原因是,如果我将来添加第二个数据源,如果我这样命名它们,我可以很容易地通过它们的数据源区分属性。

更新:

感谢@Kosta Tenasis 下面的回答和这篇文章 (https://www.javadevjournal.com/spring-boot/multiple-data-sources-with-spring-boot/),我能够解决并解决这个问题。

然后回到我的具体问题,一旦数据源配置到位,您就可以修改 application.properties 以具有:

db2.datasource.url=...

而不是:

spring.datasource.url=...

NOTE1: 如果你使用的是 Springboot 2.0,他们改为使用 Hikari 而 Hikari 没有 url 属性 而是使用 jdbc-url,所以只需将上面的内容更改为:

db2.datasource.jdbc-url=...

注意 2: 在向项目添加多个数据源时必须创建的数据源中,您将有注释 @ConfigurationProperties。此注释需要指向您更新的 application.properties 数据源(db2.datasource.url)。

默认情况下 Spring 查找 spring.datasource.** 以获取要连接的 DataSource 的属性。

所以您可能会得到错误的结果,因为您没有连接到数据库。如果你想用不同于默认的属性配置数据源,你可以这样做

@Configuration
public class DataSourceConfig {

@Bean
@ConfigurationProperties(prefix="db2.datasource")
public DataSource dataSource() {
    return DataSourceBuilder.create()
                            .build();
}

假设有一天你想要第二个 DataSource 你可以将之前的 class 修改为:

@Configuration
public class DataSourceConfig {

@Bean
@ConfigurationProperties(prefix="db2.datasource")
public DataSource d2Datasource() {
    return DataSourceBuilder.create()
                            .build();
}

@Bean
@ConfigurationProperties(prefix="db3.datasource")
public DataSource db3Datasource() { //pun intented
    return DataSourceBuilder.create()
                            .build();
    }
}

然后在每个 Class 中你想要一个 DataSource 你可以指定你喜欢哪个豆子:

public class DB3DependedClass{
    
    private final DataSource dataSource;

    public DB3DependedClass(@Qualifier("db3Datasource") DataSource dataSource){
           this.dataSource = dataSource;
 
    }
}

所以默认情况下 spring 会寻找

  1. spring.datasource.url (or spring.datasource.jdbc-url)
  2. spring.datasource.username
  3. spring.datasource.password

如果您自己指定另一个 DataSource,则不需要这些值。

所以在上面的例子中我们指定 db3.datasource spring 将寻找

  1. db3.datasource.url
  2. db3.datasource.username
  3. db3.datasource.password

这里重要的是 spring 不是 推断意味着 完整路径 确实是: db3.datasource.url spring.db3.datasource.url

最后总结一下,如果您愿意,您可以灵活地使其以 spring 开头,方法是声明一个像 spring.any.path.ilike.datasouce 这样的前缀,当然在该前缀下还有相关值。 Spring 将选择任一路径,只要您指定即可。

注意:此答案仅写在此处提供的文本框中,未在 IDE 中测试编译错误。尽管逻辑仍然成立