簡體   English   中英

Tomcat 不與 mysql 數據庫同步

[英]Tomcat doesn't sync with the mysql database

我目前正在做一個大學項目,我正在創建一個非常簡單的電子商務風格的網站。

我使用 JDBC 驅動程序管理器和連接池連接到數據庫,同時使用 Tomcat 9.0 作為容器。

問題是:當我通過網站修改某些產品時(比如說可用的數量),網站並不總是反映更改,而我總是可以在 MySql Workbench 中正確看到數據。

它實際上在同一查詢中兩次有效:

  1. 我在更改后第一次運行查詢->它顯示舊值
  2. 我在更改后第二次運行查詢 -> 它顯示了新值
  3. 我在更改后第三次運行查詢 -> 它顯示舊值

等等。

我已經嘗試關閉緩存(從查詢中,使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM