我正在使用带有注释配置的Spring Data JPA。我不使用Spring Boot,因为我不想迷失在Spring Boot的魔力中。
我有下面的配置类。
package com.demo.app.config;
import statement ....
@Configuration
@ComponentScan("com.demo.app")
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.demo.app.repository")
public class AppConfig {
@Bean
DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setPassword("test");
dataSource.setUrl("jdbc:mysql://localhost:3306/emp_db");
return dataSource;
}
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
LocalContainerEntityManagerFactoryBean em
= new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPackagesToScan(new String[]{"com.demo.app.model"});
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(additionalProperties());
return em;
}
@Bean
public PlatformTransactionManager transactionManager(final EntityManagerFactory emf) {
final JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}
Properties additionalProperties() {
Properties properties = new Properties();
properties.setProperty("hibernate.hbm2ddl.auto", "create");
properties.setProperty("hibernate.format_sql", "true");
properties.setProperty("hibernate.show_sql", "true");
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL57Dialect");
return properties;
}
}
上面的代码运行正常。
@EnableTransactionManangement
批注,它也可以正常工作。 注释的含义是什么,如果应用程序即使没有注释也可以工作
如果我更改方法名而不是transactionManager
,则应用程序将无法抱怨transactionManager
bean
如果我添加@Bean(name="txManager")
并将方法名称更改为txManager
并在服务类中更改@Transactional(value="txManager")
,那么应用程序也将找不到{{1 }}。即使我添加或删除@EnableTransactionManagement批注。
我不太确定它在内部如何工作以及如何调试这种情况。任何输入都会有很大帮助。