配置
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource.dsuser")
public DataSourceProperties userDataSourceProperties(){
return new DataSourceProperties();
}
@Bean
@Primary
public DataSource userDataSource(){
return userDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
/***********************************************************************************************/
@Bean
@ConfigurationProperties(prefix = "spring.datasource.dsorder")
public DataSourceProperties orderDataSourceProperties(){
return new DataSourceProperties();
}
@Bean
public DataSource orderDataSource(){
return orderDataSourceProperties().initializeDataSourceBuilder().type(HikariDataSource.class).build();
}
@Bean
public JdbcTemplate orderJdbcTemplate(@Qualifier("orderDataSource") DataSource orderDataSource){
return new JdbcTemplate(orderDataSource);
}
/***********************************************************************************************/
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(){
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(false); //不自动生成表结构
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setJpaVendorAdapter(vendorAdapter);
factoryBean.setDataSource(userDataSource());
factoryBean.setPackagesToScan("com.nick.example"); //在哪个包下面扫描实体
return factoryBean;
}
@Bean
public PlatformTransactionManager transactionManager(){
JpaTransactionManager userTM = new JpaTransactionManager();
userTM.setEntityManagerFactory(entityManagerFactory().getObject());
PlatformTransactionManager orderTM = new DataSourceTransactionManager(orderDataSource());
ChainedTransactionManager tm = new ChainedTransactionManager(orderTM,userTM);//放在前面的后提交
return tm;
}
@Autowired
CustomerRepository customerRepository;
@Autowired
@Qualifier("orderJdbcTemplate")
private JdbcTemplate orderJdbcTemplate;
private static final String SQL_CREATE_ORDER = "INSERT INTO customer_order (customer_id, title,amount) VALUES (?,?,?)";
@Transactional
public void createOrder(Order order) {
Customer customer = customerRepository.findById(order.getCustomerId()).orElse(null);
customer.setDeposit(customer.getDeposit()-order.getAmount());
customerRepository.save(customer);
if(order.getTitle().contains("error1")){
throw new RuntimeException("Error1");
}
orderJdbcTemplate.update(SQL_CREATE_ORDER,order.getCustomerId(),order.getTitle(),order.getAmount());
if(order.getTitle().contains("error2")){
throw new RuntimeException("Error2");
}
}
public Map userInfo(Long id) {
Customer customer = customerRepository.findById(id).orElse(null);
List orders = orderJdbcTemplate.queryForList("select * from customer_order where customer_id=" + id);
Map result = new HashMap();
result.put("customer",customer);
result.put("order",orders);
return result;
}
网友评论