【发布时间】:2018-05-25 04:11:32
【问题描述】:
我在 Tomcat 8 中运行的 REST 服务器应用程序 (Jersey+ActiveJDBC+Shiro+TomcatJDBC) 中遇到以下问题,并且数据库是 PostgreSQL,它也在 VPS 中运行。
有时在通过 REST 应用程序进行大量/大量 CRUD 活动后,数据库中插入的数据不存在。
注意:我在 ActiveJDBC 中使用插入,因为我有自定义 PK 并且没有使用任何缓存。
例如:通过REST调用total data时是100,直接查数据库时是80。然后如果我重启Tomcat,REST会响应80,这样数据就没有了……
我已经调试了所有潜在的错误(检查了 Tomcat 日志、Postgresql 日志和应用程序日志,还有 VPS)但什么也没找到!插入的数据就像从未插入过一样。
丢失的数据是偶尔发生的,我无法重现它。因此我无法修复错误。
(已编辑,之前引用错误):
然后我发现了这个问答: Hibernate not saving Object in the Database
ActiveJDBC 是否有可能出现上述刷新问题,因为像上面的问答一样,它只发生在 PostgreSQL 上。
保存代码:
try(DB db = new DB()){
db.open(DataSourcePool.getInstance().ds_pooled);
dbModel dbModel = new dbModel();
dbModel.setPojoModel(PojoModel);
CheckRulesCreate(dbModel); // Business 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");
【问题讨论】:
标签: activejdbc