【问题标题】:Spring Boot: Read Datasource properties from another property fileSpring Boot:从另一个属性文件中读取数据源属性
【发布时间】:2016-05-11 10:01:53
【问题描述】:

我想在Spring Boot中配置一个tomcat数据源,数据库的属性存储在另一个属性文件中(比如dbConnection.properties),key不同。

例如

dbConnection.properties:

DATABASE_URL=SomeURL
DATABASE_USER=SomeUser
DATABASE_PASSWORD=SomePassword

据我了解,与数据源相关的属性必须在 application.properties 中指定为:

spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass

如何将值从 dbConnection.properties 传递到 application.properties?

【问题讨论】:

    标签: java spring-boot


    【解决方案1】:

    来自Spring Boot documentation

    属性贡献可能来自类路径中的其他 jar 文件,因此您不应认为这是一个详尽的列表。定义自己的属性也是完全合法的。

    所以你可以拥有自己的属性文件,它应该在你的类路径中,

    使用Value注解注入属性

    @Value("#{propFileName.propKeyName}")

    【讨论】:

    • 我将不得不退回到 Bean 配置来执行此操作,有什么方法可以将外部属性文件中的条目映射到 application.properties?
    【解决方案2】:

    您所需要的只是覆盖 Spring-Boot 的 Datasource 默认配置。见上面的例子:

    @Bean
    @Primary
    public DataSource dataSource() {
       return DataSourceBuilder
        .create()
        .username("") // TODO: Get from properties
        .password("") // TODO: Get from properties
        .url("") // TODO: Get from properties
        .driverClassName("") // TODO: Get from properties
        .build();
    }
    

    为了从属性中获取,您可以使用@Saravana 所说的@Value 注释。

    【讨论】:

      【解决方案3】:

      @Manish Kothari...试试这个,创建一个带有注释的配置类 @ConfigurationProperties。

      @Component
      @PropertySource("classpath:dbConnection.properties")
      @ConfigurationProperties
      public class ConfigurationClass{
      
       //some code
      
      }
      

      现在它会调用你的数据库属性...我希望这会起作用

      【讨论】:

        【解决方案4】:

        有多种方法可以做到这一点 1.您可以从命令提示符传递属性文件

        -Dspring.config.location=classpath:job1.properties,classpath:job2.properties
        

        2.方式是添加@PropertySource注解 公共类 AppConfig

            @PropertySource("classpath:config.properties")
            public class LoadDbProps{
              @value("${DATABASE_USER}")
              private String dbUserName;
              private String dbUserName; 
            }
        

        稍后您可以使用 @Bean 配置将此 LoadDbProps 设置为 application.properties 属性。

        【讨论】:

          【解决方案5】:

          以下解决方案对我有用:

           @Configuration
          public class DataSourceConfig {
              @Bean
              public DataSource getDataSource() {
                  Properties properties = null;
                  InputStream inputStream = null;
                  DataSourceBuilder dataSourceBuilder =null;
                  try {
                  properties = new Properties();
                  inputStream = new FileInputStream("./src/main/resources/config.properties");
                  properties.load(inputStream);
                  dataSourceBuilder = DataSourceBuilder.create();
                  dataSourceBuilder.url(properties.getProperty("url"));
                  dataSourceBuilder.username(properties.getProperty("user"));
                  dataSourceBuilder.password(properties.getProperty("password"));
                  }
                  catch(Exception ex) {
                      System.out.println("CONFIG EXCEPTION :"+ex);
                  }
                  return dataSourceBuilder.build();
              }
          }
          

          更多详情请参考以下链接:

          https://howtodoinjava.com/spring-boot2/datasource-configuration/#:~:text=Spring%20boot%20allows%20defining%20datasource,a%20DataSource%20bean%20for%20us.

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-10-27
            • 2015-11-19
            • 2016-04-29
            • 2023-02-03
            • 2019-03-11
            • 2020-07-01
            • 1970-01-01
            相关资源
            最近更新 更多