【发布时间】:2018-02-12 12:29:53
【问题描述】:
我想在SpringBoot 中使用EntityManager。
应用程序
@Configuration
@EnableRetry // To enable Spring retry
@EnableJpaRepositories
@EnableAspectJAutoProxy(proxyTargetClass=true)
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
邮件配置
@Configuration
@EnableJpaRepositories(
entityManagerFactoryRef = "mailEntityManager",
transactionManagerRef = "mailTransactionManager",
basePackageClasses = MmcMonitoringLog.class)
public class MailConfig {
@Autowired(required = false)
private PersistenceUnitManager persistenceUnitManager;
@Bean
@ConfigurationProperties("app.order.jpa")
public JpaProperties orderJpaProperties() {
return new JpaProperties();
}
@Bean
@ConfigurationProperties(prefix = "app.order.datasource")
public DataSource orderDataSource() {
return (DataSource) DataSourceBuilder.create().type(DataSource.class).build();
}
@Bean
public LocalContainerEntityManagerFactoryBean orderEntityManager(
JpaProperties orderJpaProperties) {
EntityManagerFactoryBuilder builder = createEntityManagerFactoryBuilder(orderJpaProperties);
return builder
.dataSource(orderDataSource())
.packages(MmcMonitoringLog.class)
.persistenceUnit("ordersDs")
.build();
}
@Bean
public JpaTransactionManager orderTransactionManager(EntityManagerFactory orderEntityManager) {
return new JpaTransactionManager(orderEntityManager);
}
private EntityManagerFactoryBuilder createEntityManagerFactoryBuilder(JpaProperties customerJpaProperties) {
JpaVendorAdapter jpaVendorAdapter = createJpaVendorAdapter(customerJpaProperties);
return new EntityManagerFactoryBuilder(jpaVendorAdapter,
customerJpaProperties.getProperties(), this.persistenceUnitManager);
}
private JpaVendorAdapter createJpaVendorAdapter(JpaProperties jpaProperties) {
AbstractJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
adapter.setShowSql(jpaProperties.isShowSql());
adapter.setDatabase(jpaProperties.getDatabase());
adapter.setDatabasePlatform(jpaProperties.getDatabasePlatform());
adapter.setGenerateDdl(jpaProperties.isGenerateDdl());
return adapter;
}
}
邮件服务
public class MailService extends TaskAdaptor implements Runnable {
@Autowired
MmcMonitoringLogRepository mmcMonitoringLogRepository;
@Override
public void run() {
List<MmcMonitoringLog> list = mmcMonitoringLogRepository.findByMonitoringLog("1");
......
}
appication.properties
spring.datasource.url= jdbc:mysql://xxxx:3306/adb?autoReconnect=true&useSSL=false
spring.datasource.username=xxx
spring.datasource.password=xxx
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = none
我尝试实现以下https://github.com/snicoll-demos/demo-multi-entity-managers/blob/master/src/main/java/demo/order/OrderConfig.java,但我的 SpringBoot 立即停止,没有抛出任何异常。如果我删除 MailConfig,Springboot 可以启动。有什么问题 ?我走对了吗?
【问题讨论】:
-
你为什么要自己配置所有东西,而不是使用 Spring 配置。因此,基本上你所有的
spring.datasource和spring.jpa属性都是无用的。我会说使用框架而不是围绕它工作。 -
@M.Deinum 我应该改变什么才能在 mailService 中使用 EntityManager ?
-
删除您的
MailConfig,从您的应用程序类中删除@EnableJpaRepositories、@EnableAspectJAutoProxy和@Configuration。 Spring Boot 已经为您完成了所有这些工作。 -
@M.Deinum 完成。由于没有persistenceUnit,我怎么能添加EM?
-
为什么?使用
repository.save。
标签: java spring jpa spring-boot