[英]Tomcat doesn't sync with the mysql database
我目前正在做一個大學項目,我正在創建一個非常簡單的電子商務風格的網站。
我使用 JDBC 驅動程序管理器和連接池連接到數據庫,同時使用 Tomcat 9.0 作為容器。
問題是:當我通過網站修改某些產品時(比如說可用的數量),網站並不總是反映更改,而我總是可以在 MySql Workbench 中正確看到數據。
它實際上在同一查詢中兩次有效:
等等。
我已經嘗試關閉緩存(從查詢中,使用 SQL_NO_CACHE),但它似乎並沒有解決問題,我嘗試使用 Datasource,但它會導致其他問題,很可能我不會沒時間解決。
這是連接池文件,我認為這可能是問題,我不太確定:
public class DriverManagerConnectionPool {
private static List<Connection> freeDbConnections;
static {
freeDbConnections = new LinkedList<Connection>();
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("DB driver not found:"+ e.getMessage());
}
}
private static synchronized Connection createDBConnection() throws SQLException {
Connection newConnection = null;
String ip = "localhost";
String port = "3306";
String db = "storage";
String username = "root";
String password = "1234";
newConnection = DriverManager.getConnection("jdbc:mysql://"+ ip+":"+ port+"/"+db+"?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC", username, password);
newConnection.setAutoCommit(false);
return newConnection;
}
public static synchronized Connection getConnection() throws SQLException {
Connection connection;
if (!freeDbConnections.isEmpty()) {
connection = (Connection) freeDbConnections.get(0);
freeDbConnections.remove(0);
try {
if (connection.isClosed())
connection = getConnection();
} catch (SQLException e) {
connection.close();
connection = getConnection();
}
} else {
connection = createDBConnection();
}
return connection;
}
public static synchronized void releaseConnection(Connection connection) throws SQLException {
if(connection != null) freeDbConnections.add(connection);
}
}
我真的希望你能幫助我,我在網上沒有找到任何解決方案!
我猜這是因為自動提交被禁用。 請嘗試使用@Transactional 或將自動提交設置為true。 您也可以嘗試在每個語句之后使用 db.commit。
根據您的連接池實現,池中的所有連接似乎都是自動提交的錯誤。
請檢查您是否在執行查詢后正確提交了連接。
因此,在使用相同連接進行更改后執行查詢時,它可能會反映這些更改,較早完成並在其他連接上完成,可能會返回舊值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.