Spring文档建议不要在接口方法上放置@Transactional注释,因为接口注释不是由类继承的.但是,使用Java 8,我们可以在界面中提供具体的默认实现.如果这样的默认接口方法需要是事务边界,我们别无选择:我们必须在接口方法上放置@Transactional注释.
这会起作用(即在这种情况下春天是否会尊重交易边界)?如果是这样,这种方法有任何隐藏的陷阱吗?
我有一个使用Spring来设置连接池数据源的webapp,如下所示:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driverClassName}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
Run Code Online (Sandbox Code Playgroud)
该应用程序还使用logback将事件直接记录到数据库.使用DBAppender在logback.xml文件中配置Logback:
<appender name="eventsDB" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
<dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
<driverClass>${jdbc.driverClassName}</driverClass>
<jdbcUrl>${jdbc.url}</jdbcUrl>
<user>${jdbc.username}</user>
<password>${jdbc.password}</password>
</dataSource>
</connectionSource>
</appender>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我们正在设置dataSource两次,并且在每种情况下都需要单独的属性替换.简单地让Spring创建dataSource并将其传递给logback DBAppender会好得多.
谁能建议最好的方法呢?
我有一个 JQuery 数据表,它通过 ajax 请求加载数据。表格旁边有一个表格,可让用户过滤服务器上的结果。当用户更改过滤器表单时,我使用新的过滤器数据调用 fnReloadAjax(),然后使用新的过滤结果重新绘制表格。
我遇到的问题是分页会粘住,即使表格不再有足够的项目来到达当前页面。因此,如果表格最初有 20 个项目,并且用户在第 2 页(每页 10 个项目),并且他们更改过滤器以便只返回 5 个项目,则表格不显示任何项目并在底部显示:
Showing 11 to 5 of 5 entries
Run Code Online (Sandbox Code Playgroud)
即使只有一页的数据,它仍然在第 2 页。
我发现了许多关于尝试保留当前页面/行的帖子,但没有一个显示将分页重置为第一页的简单方法。什么是最简单的方法来做到这一点?
为了清楚起见,这是我的代码的简化版本:
$("#mytable").dataTable({
bStateSave: false,
fnServerData: function (sSource, aoData, fnCallback) {
return $.ajax({
type: "POST",
url: url,
data: {filter: filterValue}
});
}
});
$("#myForm").submit(function(e) {
table.fnReloadAjax();
return false;
});
Run Code Online (Sandbox Code Playgroud) spring ×2
annotations ×1
datasource ×1
datatables ×1
java ×1
java-8 ×1
javascript ×1
jquery ×1
logback ×1
pagination ×1
transactions ×1