0

我正在使用路由数据源,并且我的创建操作使用 @Transactional 注释进行了注释。但我注意到事务没有开始或提交。以下是我的路由数据源配置。

<bean id="routingDataSource" class="com.test.dataaccess.base.dao.CustomerRoutingDataSource">
    <property name="defaultTargetDataSource" ref="testDataSource" />
     <property name="targetDataSources">
        <map key-type="java.lang.String">
            <entry key="0" value-ref="testDataSource" />
        </map>
    </property>  
</bean>

<bean class="org.springframework.orm.jpa.JpaTransactionManager"
        id="customerTransactionManager">
        <property name="entityManagerFactory" ref="customerEntityManagerFactory" />
</bean>

我与我的 org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean 一起使用的数据源相同。

我在部署时将另一个数据源添加到路由数据源,如下所示。Spring 事务管理不起作用。

@Component
public class CustomerDataSourcePostProcessor implements ApplicationListener {

    @Autowired 
    DatasourcesDAO datasourcesDAO; 

    @Autowired
    @Qualifier("customerEntityManagerFactory")
    private LocalContainerEntityManagerFactoryBean testContentEntityManagerFactory;

    @Autowired
    @Qualifier("routingDataSource")
    private CustomerRoutingDataSource routingDataSource;

    @Autowired
    @Qualifier("customerTransactionManager")
    private JpaTransactionManager  customerTransactionManager;


    private static final Logger LOGGER = LoggerFactory.getLogger(CustomerDataSourcePostProcessor.class);

    public void onApplicationEvent(ApplicationEvent e) {
        if (e instanceof ContextRefreshedEvent) {
            loadCustomerDBConfigForServer();
        }
    }

    private void loadCustomerDBConfigForServer() {

        Map<Object, Object> databaseConfig = loadCustomerDatabaseConfig();
        routingDataSource.setTargetDataSources(databaseConfig);       
        routingDataSource.afterPropertiesSet(); 

        testContentEntityManagerFactory.setDataSource(routingDataSource);  
        testContentEntityManagerFactory.afterPropertiesSet(); 

        EntityManagerFactory emf  =testContentEntityManagerFactory.getObject(); // transaction not begin possible root cause one 
        customerTransactionManager.setEntityManagerFactory(emf);
        customerTransactionManager.afterPropertiesSet(); 
    }
}
4

0 回答 0