日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

基于Java連接池Druid的應用開發

本文介紹基于MySQL JDBC連接池Druid連接并訪問Lindorm寬表引擎的使用方法。

前提條件

操作步驟

  1. 通過連接池Druid連接Lindorm寬表引擎前,需要安裝連接池Druid和Lindorm JDBC Driver。

    以Maven項目為例,在pom.xml文件的dependencies中添加以下依賴項。

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.2.11</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>

    如果您是通過druid-spring-boot-starter使用Druid連接池,則需要先排除druid-spring-boot-starter依賴的druid組件,再顯式依賴druid組件,具體代碼如下所示。

    <dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>druid-spring-boot-starter</artifactId>
       <version>1.2.11</version>
       <exclusions>
          <exclusion>
             <groupId>com.alibaba</groupId>
             <artifactId>druid</artifactId>
          </exclusion>
       </exclusions>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.2.11</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>
  2. 配置連接池Druid的參數。在Maven項目的src/main/resources目錄中新建druid.properties文件,并在文件中添加以下內容。

    # 驅動類名,無需替換
    driverClassName=com.mysql.jdbc.Driver
    # url、username、password需要替換為業務實際的內容,可以在Lindorm控制臺上獲取
    # database為需要連接的數據庫
    url=jdbc:mysql://ld-uf6k8yqb741t3****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com:33060/database?sslMode=disabled&allowPublicKeyRetrieval=true&useServerPrepStmts=true&useLocalSessionState=true&rewriteBatchedStatements=true&cachePrepStmts=true&prepStmtCacheSize=100&prepStmtCacheSqlLimit=50000000
    username=****
    password=****
    
    # 初始化連接池即創建連接,建議保持不變
    init=true
    # 初始化連接池時建立連接的個數,可以根據實際情況調整
    initialSize=10
    # 連接池中允許的最大連接數量,可以根據實際情況調整,建議和業務線程池大小相同
    maxActive=200
    # 連接池中維護的空閑連接的數量,可以根據實際情況調整,建議和maxActive的值相同
    minIdle=200
    # 獲取連接最大等待時間,單位毫秒(ms),建議保持不變
    maxWait=30000
    
    # 連接保活配置項,建議保持不變,否則可能出現連接斷開
    druid.keepAlive=true
    # 連接空閑多久以后,會檢查連接的有效性
    druid.keepAliveBetweenTimeMillis=120000
    # 多久執行一次淘汰連接和保活操作
    timeBetweenEvictionRunsMillis=60000
    minEvictableIdleTimeMillis=1800000
    
    # 連接驗證配置項,建議保持不變
    testWhileIdle=true
    testOnBorrow=false
    testOnReturn=false

    參數說明

    參數

    說明

    url

    MySQL JDBC連接地址。格式為jdbc:mysql://<MySQL兼容地址>/<數據庫名>?連接配置參數

    MySQL兼容地址的獲取方式,請參見查看連接地址。僅填寫MySQL JDBC連接地址時,默認連接default數據庫。

    username

    如果您忘記用戶密碼,可以通過Lindorm寬表引擎的集群管理系統修改密碼。具體操作,請參見修改用戶密碼

    password

  3. 加載連接池Druid的參數并初始化連接池Druid。

    // 加載參數
    Properties properties = new Properties();
    InputStream inputStream = DruidPoolDemo.class.getClassLoader().getResourceAsStream("druid.properties");
    properties.load(inputStream);
    // 初始化連接池
    DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
  4. 通過連接池Druid獲取JDBC的連接信息并訪問Lindorm寬表引擎。

    /* -------------- 基于JDBC的訪問示例 ----------------- */
    
    String tableName = "sql_table_" + new Random().nextInt(1000);
    // 創建表
    try (Connection connection = dataSource.getConnection()) {
        try (Statement statement = connection.createStatement()) {
            String sql = "create table if not exists " + tableName + "(id VARCHAR, name VARCHAR, primary key(id))";
            int ret = statement.executeUpdate(sql);
            System.out.println(ret);
        }
    }
    
    // 插入數據
    try (Connection connection = dataSource.getConnection()) {
        String sql = "insert into " + tableName + "(id,name) values(?,?)";
        try (PreparedStatement ps = connection.prepareStatement(sql)) {
            ps.setString(1, "aa");
            ps.setString(2, "bb");
    
            int ret = ps.executeUpdate();
            System.out.println(ret);
        }
    }
    
    // 查詢數據
    try (Connection connection = dataSource.getConnection()) {
        String sql = "select * from " + tableName + " where id=?";
        try (PreparedStatement ps = connection.prepareStatement(sql)) {
            ps.setString(1, "aa");
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                String id = rs.getString(1);
                String name = rs.getString(2);
                System.out.println("id=" + id);
                System.out.println("name=" + name);
            }
        }
    }
    
    // 刪除數據
    try (Connection connection = dataSource.getConnection()) {
        String sql = "delete from " + tableName + " where id=?";
        try (PreparedStatement ps = connection.prepareStatement(sql)) {
            ps.setString(1, "aa");
            ps.executeUpdate();
        }
    }
    說明

    在Lindorm SQL中,insert語句的語義與upsert相同。由于MySQL JDBC的客戶端優化了insert語句,因此在寫入數據時更推薦您使用insert語句。