我想在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?
答案 0 :(得分:0)
属性贡献可能来自类路径上的其他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();
}
}
请参阅下面的链接以获取更多详细信息: