使用Spring Boot,我可以使用以下代码实例化JdbcTemplate
:
代码:
@Autowired
private JdbcTemplate jdbcTemplate;
属性:
spring.datasource.url=jdbc:postgresql://my_url:my_port/my_other_stuff
spring.datasource.username=my_user_name
spring.datasource.password=my_password
spring.datasource.driver-class-name=org.postgresql.Driver
这会创建一个类的数据源:org.apache.tomcat.jdbc.pool.DataSource
如何以编程方式设置DataSource用户名/密码?
我们的政策是不以纯文本格式存储凭据,我必须在我工作的地方使用特定的凭据提供程序。
答案 0 :(得分:75)
如果您使用DataSourceBuilder
启动器,则可以使用jdbc
。另外,为了覆盖默认的自动配置bean,您需要将bean标记为@Primary
在我的情况下,我的属性以datasource.postgres
前缀开头。
E.g
@ConfigurationProperties(prefix = "datasource.postgres")
@Bean
@Primary
public DataSource dataSource() {
return DataSourceBuilder
.create()
.build();
}
如果您不可行,则可以使用
@Bean
@Primary
public DataSource dataSource() {
return DataSourceBuilder
.create()
.username("")
.password("")
.url("")
.driverClassName("")
.build();
}
答案 1 :(得分:20)
我的弹簧启动项目已根据您的帮助正常运行。 yaml数据源配置为:
spring:
# (DataSourceAutoConfiguration & DataSourceProperties)
datasource:
name: ds-h2
url: jdbc:h2:D:/work/workspace/fdata;DATABASE_TO_UPPER=false
username: h2
password: h2
driver-class: org.h2.Driver
自定义数据源
@Configuration
@Component
public class DataSourceBean {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
@Primary
public DataSource getDataSource() {
return DataSourceBuilder
.create()
// .url("jdbc:h2:D:/work/workspace/fork/gs-serving-web-content/initial/data/fdata;DATABASE_TO_UPPER=false")
// .username("h2")
// .password("h2")
// .driverClassName("org.h2.Driver")
.build();
}
}
答案 2 :(得分:11)
您需要做的就是注释一个使用@Bean返回DataSource的方法。 下面是一个完整的工作示例。
@Bean
public DataSource dataSource() {
DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.url(dbUrl);
dataSourceBuilder.username(username);
dataSourceBuilder.password(password);
return dataSourceBuilder.build();
}
答案 3 :(得分:4)
如果你想要更多的日期资源配置,例如
spring.datasource.test-while-idle=true
spring.datasource.time-between-eviction-runs-millis=30000
spring.datasource.validation-query=select 1
您可以使用以下代码
@Bean
public DataSource dataSource() {
DataSource dataSource = new DataSource(); // org.apache.tomcat.jdbc.pool.DataSource;
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setTestWhileIdle(testWhileIdle);
dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMills);
dataSource.setValidationQuery(validationQuery);
return dataSource;
}
答案 4 :(得分:3)
如果您使用的是最新的Spring Boot(带有jdbc启动器和Hikari),则会遇到:
java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName.
要解决这个问题:
datasource.oracle.url=youroracleurl
@Primary
是必需的!):@Bean
@Primary
@ConfigurationProperties("datasource.oracle")
public DataSourceProperties getDatasourceProperties() {
return new DataSourceProperties();
}
@Bean
@ConfigurationProperties("datasource.oracle")
public DataSource getDatasource() {
return getDatasourceProperties().initializeDataSourceBuilder()
.username("username")
.password("password")
.build();
}
答案 5 :(得分:2)
作为替代方法,您可以使用DriverManagerDataSource,例如:
public DataSource getDataSource(DBInfo db) {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setUsername(db.getUsername());
dataSource.setPassword(db.getPassword());
dataSource.setUrl(db.getUrl());
dataSource.setDriverClassName(db.getDriverClassName());
return dataSource;
}
但是要小心使用它,因为:
注意:此类不是实际的连接池;它不是 实际上池连接。它只是一个简单的替代品 完整的连接池,实现相同的标准接口, 但每次通话都要创建新的连接。 reference
答案 6 :(得分:0)
使用url似乎不起作用。改为使用jdbcUrl进行更改。
在属性中:
security:
datasource:
jdbcUrl: jdbc:mysql://ip:3306/security
username: user
password: pass
在Java中:
@ConfigurationProperties(prefix = "security.datasource")
@Bean("dataSource")
@Primary
public DataSource dataSource(){
return DataSourceBuilder
.create()
.build();
}
答案 7 :(得分:0)
我在 Spring-Boot 2 中自定义了 Tomcat数据源。
依赖版本:
也许对某人有用。
application.yml
spring:
datasource:
driver-class-name: org.postgresql.Driver
type: org.apache.tomcat.jdbc.pool.DataSource
url: jdbc:postgresql://${spring.datasource.database.host}:${spring.datasource.database.port}/${spring.datasource.database.name}
database:
host: localhost
port: 5432
name: rostelecom
username: postgres
password: postgres
tomcat:
validation-query: SELECT 1
validation-interval: 30000
test-on-borrow: true
remove-abandoned: true
remove-abandoned-timeout: 480
test-while-idle: true
time-between-eviction-runs-millis: 60000
log-validation-errors: true
log-abandoned: true
Java
@Bean
@Primary
@ConfigurationProperties("spring.datasource.tomcat")
public PoolConfiguration postgresDataSourceProperties() {
return new PoolProperties();
}
@Bean(name = "primaryDataSource")
@Primary
@Qualifier("primaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource primaryDataSource() {
PoolConfiguration properties = postgresDataSourceProperties();
return new DataSource(properties);
}
完成此操作的主要原因是应用程序中有多个数据源,其中之一必须标记为 @Primary 。