问题描述
用@Transactional注释我的服务实现类时,我面临以下问题
APPLICATION Failed TO START
***************************
Description:
The bean 'BusinessServiceImpl ' Could not be injected as a 'com.business.service.BusinessServiceImpl ' because it is a JDK dynamic proxy that implements:
com.business.service.BusinessService
Action:
Consider injecting the bean as one of its interfaces or forcing the use of cglib-based proxies by setting proxyTargetClass=true on @EnableAsync and/or @EnableCaching.```
Transactional and Hikari Connection pool configuration:
@Configuration
@EnableTransactionManagement
public class HibernateConfiguration {
@Autowired
private Environment environment;
@Bean
public LocalSessionfactorybean sessionFactory() {
LocalSessionfactorybean sessionFactory = new LocalSessionfactorybean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan("com.business.model");
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
public DataSource dataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setPoolName("ConnectionPool");
dataSource.setDriverClassName(environment.getrequiredProperty("jdbc.driverClassName"));
dataSource.setJdbcUrl(environment.getrequiredProperty("jdbc.url"));
dataSource.setUsername(environment.getrequiredProperty("jdbc.username"));
dataSource.setPassword(environment.getrequiredProperty("jdbc.password"));
dataSource.setMaximumPoolSize(20);
dataSource.setConnectionTimeout(TimeUnit.MINUTES.toMillis(10)); // default is 30000
dataSource.setinitializationFailFast(true);
dataSource.setIdleTimeout(TimeUnit.MINUTES.toMillis(10));
dataSource.setMinimumIdle(3);
dataSource.setMaxLifetime(TimeUnit.MINUTES.toMillis(15));
dataSource.setIdleTimeout(TimeUnit.MINUTES.toMillis(10));
// Following two properties for monitoring purpose
dataSource.setLeakDetectionThreshold(TimeUnit.MINUTES.toMillis(2));
dataSource.setRegisterMbeans(true); //As we are setting this property using HikariCP,We have to disable the default Mbean exporter() method
return dataSource;
}
@Bean
public MBeanExporter exporter() {
final MBeanExporter exporter = new MBeanExporter();
exporter.setAutodetect(true);
exporter.setExcludedBeans("dataSource");
return exporter;
}
private Properties hibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.dialect",environment.getrequiredProperty("hibernate.dialect"));
properties.put("hibernate.show_sql",environment.getrequiredProperty("hibernate.show_sql"));
properties.put("hibernate.format_sql",environment.getrequiredProperty("hibernate.format_sql"));
return properties;
}
@Bean
@Autowired
public HibernateTransactionManager transactionManager(SessionFactory s) {
return new HibernateTransactionManager(sessionFactory().getobject());
}
}
服务实现类:
@Service
@SuppressWarnings("unchecked")
@Transactional
public class BusinessServiceImpl implements BusinessService {
@Autowired
private EmployeeManagementDao employee;
...............
}
服务接口:
public interface BusinessService {
-----------
}
我试图通过参考以下答案来解决问题:
Transactional annotation error
但是它不能解决我的问题。
我为其他实现类进行了相同类型的自动装配,工作正常,但在此类中我遇到了问题。
有人可以帮我吗?
Spring Boot主类:
@SpringBootApplication
@Configuration
public class BusinessWebApplication extends SpringBootServletinitializer {
public static void main(String[] args) {
SpringApplication.run(BusinessWebApplication .class,args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
setRegisterErrorPageFilter(false);
return application.sources(applicationClass);
}
private static Class<BusinessWebApplication> applicationClass = BusinessWebApplication .class;
}
在RetailBusinessServiceImpl中,由于需要使用BusinessServiceImpl中的某些方法,因此我正在自动装配BusinessServiceImpl类
@Service
@Transactional
public class RetailBusinessServiceImpl implements RetailBusinessService {
@Autowired
private BusinessServiceImpl service;
}
服务类别:
public interface RetailBusinessService {
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)