Spring Boot:从另一个属性文件中读取数据源属性

时间:2016-05-11 10:01:54

标签: java spring-boot

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

例如

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?

5 个答案:

答案 0 :(得分:0)

来自Spring Boot documentation

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

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

使用Value注释

注入属性

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

答案 1 :(得分:0)

您需要做的就是覆盖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注释。

答案 2 :(得分:0)

@Manish Kothari ...试试这个,用注释创建一个配置类,例如 @ConfigurationProperties。

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

 //some code

}

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

答案 3 :(得分:0)

有多种方法可以做到这一点 1.您可以通过命令promopt传递属性文件

In [25]: %timeit (jez(df_full.copy()))
15 ms ± 260 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [26]: %timeit (raf(df_full.copy()))
20.3 ms ± 347 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [27]: %timeit (ct(df_full.copy()))
26.9 ms ± 286 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

2。方法是添加@PropertySource批注 公共类AppConfig

df_full = pd.DataFrame({'city': ['CollgCr', 'Veenker', 'CollgCr', 'Crawfor',
                            'NoRidge', 'Mitchel', 'Somerst', 'NWAmes',
                            'OldTown', 'BrkSide']})

#[100000 rows x 1 columns]
df_full = pd.concat([df_full] * 10000, ignore_index=True)


def jez(df_full):

    d =  {'CollgCr': 'Middle',
         'Veenker': 'Middle',
         "Mitchel": 'Lower',
         "OldTown": 'Lower',
         "BrkSide": 'Lower',
         "Sawyer": 'Lower',
         "NAmes": 'Lower',
         "IDOTRR": 'Lower',
         "MeadowV": 'Lower',
         "Edwards": 'Lower',
         "NPkVill": 'Lower',
         "BrDale": 'Lower',
         "SWISU": 'Lower',
         "Blueste": 'Lower'}

    df_full['new'] = df_full['city'].map(d).fillna('Upper')
    return df_full

def raf(df):

    m = ['CollgCr', 'Veenker']
    l = ["Mitchel", "OldTown", "BrkSide", "Sawyer", "NAmes", 
         "IDOTRR","MeadowV", "Edwards", "NPkVill", "BrDale", "SWISU", "Blueste"]

    df['new_col'] = np.select([df.city.isin(l), df.city.isin(m)],
                              ['lower', 'middle'], default='upper')
    return df

def ct(df):
    df_types = pd.DataFrame({'CollgCr': 'Middle',
                             'Veenker': 'Middle',
                             "Mitchel": 'Lower',
                             "OldTown": 'Lower',
                             "BrkSide": 'Lower',
                             "Sawyer": 'Lower',
                             "NAmes": 'Lower',
                             "IDOTRR": 'Lower',
                             "MeadowV": 'Lower',
                             "Edwards": 'Lower',
                             "NPkVill": 'Lower',
                             "BrDale": 'Lower',
                             "SWISU": 'Lower',
                             "Blueste": 'Lower'}, index=['Type']).T



    return df.merge(df_types, left_on='city', right_index=True, how='left').fillna('Upper')

print (jez(df_full.copy()))
print (raf(df_full.copy()))
print (ct(df_full.copy()))

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

答案 4 :(得分:0)

以下解决方案对我有用:

 @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