Java 使用弹簧&x27;s TransactionAwareDataSourceProxy在代码中,而不是xml中
除了使用代码而不是XML配置之外,我正在尝试。我认为这应该很简单Java 使用弹簧&x27;s TransactionAwareDataSourceProxy在代码中,而不是xml中,java,spring,jooq,spring-transactions,Java,Spring,Jooq,Spring Transactions,除了使用代码而不是XML配置之外,我正在尝试。我认为这应该很简单 // inside @Configuration annotated class @Bean public DataSource makeTransactionAware(DataSource fromConnectionPool) { return new TransactionAwareDataSourceProxy(fromConnectionPool); } 除此之外,我需要告诉Spring,注入的数据源与从方法返回
// inside @Configuration annotated class
@Bean
public DataSource makeTransactionAware(DataSource fromConnectionPool) {
return new TransactionAwareDataSourceProxy(fromConnectionPool);
}
除此之外,我需要告诉Spring,注入的
数据源
与从方法返回的数据源不同。我该怎么做呢?Bean自定义命名和限定符应该可以为您完成这项工作
示例代码只是一个起点。Bean自定义命名和限定符应该为您完成这项工作 示例代码只是一个起点。来自共享
将配置为
@Configuration
@PropertySource("classpath:config.properties")
public class DataSourceConfig{
@Value("${db.username}")
private String username;
@Value("${db.password}")
private String password;
@Value("${db.url}")
private String url;
@Bean
public DataSource dataSource() {
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName("<driver class name>"); // Spring will load the driver discovered if not specified explicitly.
basicDataSource.setUsername(username);
basicDataSource.setPassword(password);
basicDataSource.setUrl(url);
return basicDataSource;
}
@Bean
public TransactionAwareDataSourceProxy transactionAwareDataSource(DataSource dataSource) {
return new TransactionAwareDataSourceProxy(dataSource)
}
}
@配置
@PropertySource(“classpath:config.properties”)
公共类数据源配置{
@值(“${db.username}”)
私有字符串用户名;
@值(${db.password}”)
私有字符串密码;
@值(“${db.url}”)
私有字符串url;
@豆子
公共数据源数据源(){
BasicDataSource BasicDataSource=新的BasicDataSource();
basicDataSource.setDriverClassName(“”;//如果未明确指定,Spring将加载发现的驱动程序。
basicDataSource.setUsername(用户名);
basicDataSource.setPassword(密码);
basicDataSource.setUrl(url);
返回源;
}
@豆子
public TransactionAwareDataSourceProxy transactionAwareDataSource(数据源数据源){
返回新的TransactionWaredatasourceProxy(数据源)
}
}
希望这有助于分享
将配置为
@Configuration
@PropertySource("classpath:config.properties")
public class DataSourceConfig{
@Value("${db.username}")
private String username;
@Value("${db.password}")
private String password;
@Value("${db.url}")
private String url;
@Bean
public DataSource dataSource() {
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName("<driver class name>"); // Spring will load the driver discovered if not specified explicitly.
basicDataSource.setUsername(username);
basicDataSource.setPassword(password);
basicDataSource.setUrl(url);
return basicDataSource;
}
@Bean
public TransactionAwareDataSourceProxy transactionAwareDataSource(DataSource dataSource) {
return new TransactionAwareDataSourceProxy(dataSource)
}
}
@配置
@PropertySource(“classpath:config.properties”)
公共类数据源配置{
@值(“${db.username}”)
私有字符串用户名;
@值(${db.password}”)
私有字符串密码;
@值(“${db.url}”)
私有字符串url;
@豆子
公共数据源数据源(){
BasicDataSource BasicDataSource=新的BasicDataSource();
basicDataSource.setDriverClassName(“”;//如果未明确指定,Spring将加载发现的驱动程序。
basicDataSource.setUsername(用户名);
basicDataSource.setPassword(密码);
basicDataSource.setUrl(url);
返回源;
}
@豆子
public TransactionAwareDataSourceProxy transactionAwareDataSource(数据源数据源){
返回新的TransactionWaredatasourceProxy(数据源)
}
}
希望这有帮助好的,这是一个好的开始。现在,限定符和新bean需要哪些名称,以便在正确的位置使用它们?这些都是由Spring自己配置的,我无法控制它们。那么是否可以使用@Primary注释进行操作?是否要将这两个bean(“数据源”和“txAwareDS”)连接到指定的位置?因此,在一种情况下(这是Spring OOTB功能),您确实需要事务感知,但在另一种情况下(这也是Spring OOTB功能),您确实希望使用简单的数据源?好的,这是一个良好的开端。现在,限定符和新bean需要哪些名称,以便在正确的位置使用它们?这些都是由Spring自己配置的,我无法控制它们。那么是否可以使用@Primary注释进行操作?是否要将这两个bean(“数据源”和“txAwareDS”)连接到指定的位置?因此,在一种情况下(这是SpringOOTB功能),您确实需要事务感知,但在另一种情况下(这也是SpringOOTB功能),您确实希望使用简单的数据源?
@Configuration
@PropertySource("classpath:config.properties")
public class DataSourceConfig{
@Value("${db.username}")
private String username;
@Value("${db.password}")
private String password;
@Value("${db.url}")
private String url;
@Bean
public DataSource dataSource() {
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName("<driver class name>"); // Spring will load the driver discovered if not specified explicitly.
basicDataSource.setUsername(username);
basicDataSource.setPassword(password);
basicDataSource.setUrl(url);
return basicDataSource;
}
@Bean
public TransactionAwareDataSourceProxy transactionAwareDataSource(DataSource dataSource) {
return new TransactionAwareDataSourceProxy(dataSource)
}
}