如何解决如何在DBUtil中获取CommonDao的实例
我有具体要求。 我有一个由调度程序调用的控制器其余端点,并且作业详细信息已提供给控制器。 为了使其异步,我从Contoller端点生成了一个新线程来执行Job,同时将响应发送回Scheduler。 我创建了一个扩展线程的JobExecutor类。
编辑-JobExecutor将扩展Runnable。
在启动新线程之前,请像下面这样设置作业,
JobExecutor jobExecutor = new JobExecutor();
jobExecutor.setJob(job); // Job received through Scheduler
jobExecutor.start();
在run()方法中,我正在使用Quartz api执行作业。 我创建了一个自定义类CustomJob实现Job(Quartz API)
在CustomJob的execute()方法中,我正在使用COMMON模块中的ScriptExecutor类。
ScriptExecutor scriptExecutor = new ScriptExecutor();
scriptExecutor.execute(job);
在ScriptExecutor的execute()方法中,我使用ProcessBuilder执行作业。
开始执行后,我必须插入Oracle数据库。 为此,我有一个DbUtil类,它使用CommonDao插入数据库。 我使用ScriptExecutor类中的new创建一个DbUtil实例
class DbUtil
@Autowired
CommonDao // DOES NOT WORK
@Repository
class CommonDao implements JPARepository
ScriptExecutor,DbUtil和CommonDao都是COMMON模块的一部分。
在COMMON模块中,我有一个TransactionConfig类,该类具有DataSource,EntityManager和 定义了TransactionManager bean。
@Configuration
@EnableJPARepository(dao package)
@EntityScan(model package)
class TransactionConfig
我如何在DbUtil中获取CommonDao的实例? 我尝试了自动装配,但是由于DbUtil不是bean或组件,所以它不起作用。
许多线程将同时访问DbUtil和CommonDao以更新或插入数据库,因此它也必须是线程安全的。
解决方法
我解决了这个问题,方法是在Runnable中设置应用程序上下文,然后将其传递到ScriptExecutor类,然后使用应用程序上下文在DbUtil实例中设置CommonDao bean。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。