ActiveJDBC有冲洗吗?

时间:2018-05-25 04:11:32

标签: activejdbc

我在Tomcat 8中运行的REST服务器应用程序(Jersey + ActiveJDBC + Shiro + TomcatJDBC)中遇到以下问题,数据库是PostgreSQL,它也在VPS中运行。

有时在通过REST应用程序进行大量/多次CRUD活动后,数据库中插入的数据不存在。

注意:我在ActiveJDBC中使用insert,因为我有自定义PK而不使用任何缓存。

例如:通过REST调用总数据时它会显示100,但是当直接检查数据库时它会显示80.然后,如果我重新启动Tomcat,REST将响应80,因此数据消失了......

我已经调试了所有可能的错误(Checked Tomcat Log,Postgresql Log和App log,还有VPS),但什么都没发现!插入的数据就像从未插入一样。

数据消失是偶尔发生的,我无法重现它。因此无法解决这个问题。

以前编辑过,错误参考): 然后我发现这个Q& A: Hibernate not saving Object in the Database

是否有可能ActiveJDBC有如上所述的冲洗问题,因为像Q& A一样,它只发生在PostgreSQL上。

保存代码:

try(DB db = new DB()){
        db.open(DataSourcePool.getInstance().ds_pooled);

        dbModel dbModel = new dbModel();
        dbModel.setPojoModel(PojoModel);

        CheckRulesCreate(dbModel); //Bussines Rule Check, throw on Fail

        if (dbModel.insert())
            return Response.status(201).entity(new Outputs("OK",201,"Data saved!")).build();
    }

数据源池:

//Singelton Based On Bill Pugh Singeltom Design
import org.apache.tomcat.jdbc.pool.DataSource;

DataSource ds = new DataSource();

ds.setDriverClassName("org.postgresql.Driver");
ds.setUrl("jdbc:postgresql://localhost/database");
ds.setUsername("blahblah");
ds.setPassword("hisshiss");

ds.setInitialSize(10);
ds.setMaxActive(300);
ds.setMinIdle(2);
ds.setValidationQuery("select 1");
ds.setTestOnBorrow(true);
ds.setRemoveAbandoned(true);
ds.setRemoveAbandonedTimeout(60);
ds.setMaxWait(10000);
ds.setName("DataSourcePool");

1 个答案:

答案 0 :(得分:0)

ActiveJDBC不是那样的。如果您遇到类似问题,那么您的代码中就会出现错误。

在任何情况下,ActiveJDBC都是Pass-Through framework:当你调用任何CRUD方法时,框架会调用底层的JDBC。一个例外是Batch operations,但这是有意的。

如果您的应用程序工作了一年且没有问题,现在您确实遇到了问题,那么您需要查看更改的内容。