2015-03-02 68 views
27

藉助於Spring引導我可以實例化一個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用戶名/密碼編程?

我們的政策是不以純文本格式存儲憑證,我必須在工作地點使用特定的憑證提供程序。

回答

50

如果您使用jdbc啓動器,則可以使用DataSourceBuilder。此外,爲了覆蓋默認的自動配置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(); 
} 
+2

@Primary是沒有必要的,因爲自動配置僅創建一個DataSource的bean,沒有定義其它bean時。 – dunni 2015-03-03 10:21:38

+0

create()應該可能是第一個 – Gevorg 2015-03-14 02:21:32

+0

主要不是必需的。 @Bean使Spring引導能夠註冊配置。驅動程序類名,url,用戶,pwd必需 – 2016-06-16 18:49:57

9

所有你需要做的是註釋返回與@Bean一個DataSource的方法。 下面是一個完整的工作示例。

@Bean 
public DataSource dataSource() { 
    DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(); 
     dataSourceBuilder.url(dbUrl); 
     dataSourceBuilder.username(username); 
     dataSourceBuilder.password(password); 
     return dataSourceBuilder.build(); 
} 
6

謝謝你,我的春天啓動的項目通常根據你協助我的項目爲波紋管運行,我的數據源配置:

**configuration in application.yml** 
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(); 
    } 
} 
+1

這個答案很有幫助,因爲它顯示瞭如何使用默認的spring.datasource屬性來定義數據源。只有密碼,那麼你需要從application.properties(或application.yml)中刪除密碼定義並在代碼中設置一個屬性。 – 2017-09-10 02:44:57

1

如果你想要更多的日期來源配置例如

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; 
} 

參考:Spring boot jdbc Connection