java - 带 session 的异步服务

标签 java hibernate jdbc

我有一个方法将调用存储的函数。我希望它能够异步完成其工作。这就是我所拥有的,但似乎 .doWork() 从未启动,因为当我调用 getDao.deleteAll() 时,存储的函数不会运行。

@Transactional
    public void delete()
    {

        final Session session = (Session) entityManager.getDelegate();
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        executorService.execute(new Runnable()
        {
            @Override
            public void run()
            {
                LOGGER.warn("starting");
                session.doWork(new Work()
                {
                    @Override
                    public void execute(Connection connection) throws SQLException
                    {
                        try
                        {

                            CallableStatement purgeArchived = connection.prepareCall("{call deleteAll()}");
                            purgeArchived.execute();
                        }
                        catch (SQLException exception)
                        {
                            LOGGER.warn("Failed to purge archive points. Reason: " + exception);
                        }
                    }
                });
                LOGGER.warn("stopping");
            }
        });
        executorService.shutdown();
    }

我看到记录器已记录“starting”,但它从未记录“stopping”为什么会发生这种情况?

最佳答案

请注意,当您有单独的线程时,@Transaction 是没有意义的,因为事务通常是线程绑定(bind)的。

您需要从 run() 内的工厂获取一个新的 entityManager

也可以选择@Async,它更干净。

再次注意 @Async 的事务性

@Async and @Transactional: not working

作为一般经验法则,如果您想让某些工作异步 - 将其视为单个工作单元和单独的事务。

关于java - 带 session 的异步服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27066098/

相关文章:

java - 如何在 Grails 或 Hibernate 中缩短它

mysql - Apache 服务器和 tomcat 服务器

java.lang.IllegalArgumentException : Can not set int field it. besmart.models.Park.idPark 到 [Ljava.lang.Object;

mysql - 具有 JDBC 配置的 Spring-Session : Table 'test.spring_session' doesn't exist

java - 在javascript中将字符串转换为印度格式

java - 将 Java Applet 嵌入到 .html 文件中

java - DATE 的 JDBC 错误格式

java - AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException : -1

java - 如何减少 mybatis-spring xml 文件扫描时间?

java - Flyway 中的 DDL + DML(推荐方法)