<bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/db1" />
<property name="username" value="username1" />
<property name="password" value="password1" />
</bean>
<bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/db2" />
<property name="username" value="username2" />
<property name="password" value="password2" />
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource1" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="userService" class="com.example.UserService">
<property name="userDao" ref="userDao" />
</bean>
<bean id="userDao" class="com.example.UserDao">
<property name="dataSource" ref="dataSource2" />
</bean>
@Service
public class UserService {
@Autowired
private UserDao userDao;
@Transactional
public void transferMoney(int fromAccountId, int toAccountId, int amount) {
userDao.withdraw(fromAccountId, amount);
userDao.deposit(toAccountId, amount);
}
}
@Repository
public class UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public void withdraw(int accountId, int amount) {
String sql = "UPDATE account SET balance = balance - ? WHERE id = ?";
jdbcTemplate.update(sql, amount, accountId);
}
public void deposit(int accountId, int amount) {
String sql = "UPDATE account SET balance = balance + ? WHERE id = ?";
jdbcTemplate.update(sql, amount, accountId);
}
}