ConnectionTest.java 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. import oracle.jdbc.OracleConnection;
  2. import org.dbsyncer.connector.config.DatabaseConfig;
  3. import org.dbsyncer.connector.database.DatabaseConnectorMapper;
  4. import org.dbsyncer.connector.database.ds.SimpleConnection;
  5. import org.dbsyncer.connector.enums.TableTypeEnum;
  6. import org.dbsyncer.connector.model.Table;
  7. import org.junit.Test;
  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;
  10. import org.springframework.jdbc.core.BatchPreparedStatementSetter;
  11. import java.nio.charset.Charset;
  12. import java.sql.*;
  13. import java.time.LocalDateTime;
  14. import java.util.ArrayList;
  15. import java.util.List;
  16. import java.util.concurrent.*;
  17. /**
  18. * @author AE86
  19. * @version 1.0.0
  20. * @date 2022/4/11 20:19
  21. */
  22. public class ConnectionTest {
  23. private final Logger logger = LoggerFactory.getLogger(getClass());
  24. @Test
  25. public void testByte() {
  26. final DatabaseConnectorMapper connectorMapper = new DatabaseConnectorMapper(createOracleConfig());
  27. String executeSql = "UPDATE \"my_user\" SET \"name\"=?,\"clo\"=? WHERE \"id\"=?";
  28. int[] execute = connectorMapper.execute(databaseTemplate ->
  29. databaseTemplate.batchUpdate(executeSql, new BatchPreparedStatementSetter() {
  30. @Override
  31. public void setValues(PreparedStatement ps, int i) {
  32. try {
  33. SimpleConnection connection = (SimpleConnection) databaseTemplate.getConnection();
  34. OracleConnection conn = (OracleConnection) connection.getConnection();
  35. Clob clob = conn.createClob();
  36. clob.setString(1, new String("中文888".getBytes(Charset.defaultCharset())));
  37. ps.setString(1, "hello888");
  38. ps.setClob(2, clob);
  39. ps.setInt(3, 2);
  40. } catch (SQLException e) {
  41. e.printStackTrace();
  42. }
  43. }
  44. @Override
  45. public int getBatchSize() {
  46. return 1;
  47. }
  48. })
  49. );
  50. logger.info("execute:{}", execute);
  51. }
  52. @Test
  53. public void testConnection() throws InterruptedException {
  54. final DatabaseConnectorMapper connectorMapper = new DatabaseConnectorMapper(createSqlServerConfig());
  55. // 模拟并发
  56. final int threadSize = 100;
  57. final ExecutorService pool = Executors.newFixedThreadPool(threadSize);
  58. final CyclicBarrier barrier = new CyclicBarrier(threadSize);
  59. final CountDownLatch latch = new CountDownLatch(threadSize);
  60. for (int i = 0; i < threadSize; i++) {
  61. final int k = i + 3;
  62. pool.submit(() -> {
  63. try {
  64. barrier.await();
  65. // 模拟操作
  66. System.out.println(String.format("%s %s:%s", LocalDateTime.now(), Thread.currentThread().getName(), k));
  67. Object execute = connectorMapper.execute(tem -> tem.queryForObject("select 1", Integer.class));
  68. System.out.println(String.format("%s %s:%s execute=>%s", LocalDateTime.now(), Thread.currentThread().getName(), k, execute));
  69. } catch (InterruptedException e) {
  70. logger.error(e.getMessage());
  71. } catch (BrokenBarrierException e) {
  72. logger.error(e.getMessage());
  73. } catch (Exception e) {
  74. logger.error(e.getMessage());
  75. } finally {
  76. latch.countDown();
  77. }
  78. });
  79. }
  80. try {
  81. latch.await();
  82. logger.info("try to shutdown");
  83. pool.shutdown();
  84. } catch (InterruptedException e) {
  85. logger.error(e.getMessage());
  86. }
  87. TimeUnit.SECONDS.sleep(3);
  88. logger.info("test end");
  89. }
  90. @Test
  91. public void testReadSchema() {
  92. getTables(createOracleConfig(), "test", "AE86", "MY_ORG");
  93. getTables(createOracleConfig(), "test", "AE86", null);
  94. getTables(createMysqlConfig(), "test", "root", "MY_ORG");
  95. getTables(createMysqlConfig(), "test", "root", null);
  96. getTables(createSqlServerConfig(), "test", "dbo", "MY_ORG");
  97. getTables(createSqlServerConfig(), "test", "dbo", null);
  98. getTables(createPostgresConfig(), "postgres", "public", "MY_ORG");
  99. getTables(createPostgresConfig(), "postgres", "public", null);
  100. }
  101. private List<Table> getTables(DatabaseConfig config, final String catalog, final String schema, final String tableNamePattern) {
  102. final DatabaseConnectorMapper connectorMapper = new DatabaseConnectorMapper(config);
  103. List<Table> tables = new ArrayList<>();
  104. connectorMapper.execute(databaseTemplate -> {
  105. SimpleConnection connection = (SimpleConnection) databaseTemplate.getConnection();
  106. Connection conn = connection.getConnection();
  107. String databaseCatalog = null == catalog ? conn.getCatalog() : catalog;
  108. String schemaNamePattern = null == schema ? conn.getSchema() : schema;
  109. String[] types = {TableTypeEnum.TABLE.getCode(), TableTypeEnum.VIEW.getCode(), TableTypeEnum.MATERIALIZED_VIEW.getCode()};
  110. final ResultSet rs = conn.getMetaData().getTables(databaseCatalog, schemaNamePattern, tableNamePattern, types);
  111. while (rs.next()) {
  112. final String tableName = rs.getString("TABLE_NAME");
  113. final String tableType = rs.getString("TABLE_TYPE");
  114. tables.add(new Table(tableName, tableType));
  115. }
  116. return tables;
  117. });
  118. logger.info("\r 表总数{}", tables.size());
  119. tables.forEach(t -> logger.info("{} {}", t.getName(), t.getType()));
  120. return tables;
  121. }
  122. private DatabaseConfig createSqlServerConfig() {
  123. DatabaseConfig config = new DatabaseConfig();
  124. config.setUrl("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=test");
  125. config.setUsername("sa");
  126. config.setPassword("123");
  127. config.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
  128. return config;
  129. }
  130. private DatabaseConfig createOracleConfig() {
  131. DatabaseConfig config = new DatabaseConfig();
  132. config.setUrl("jdbc:oracle:thin:@127.0.0.1:1521:ORCL");
  133. config.setUsername("ae86");
  134. config.setPassword("123");
  135. config.setDriverClassName("oracle.jdbc.OracleDriver");
  136. return config;
  137. }
  138. private DatabaseConfig createMysqlConfig() {
  139. DatabaseConfig config = new DatabaseConfig();
  140. config.setUrl("jdbc:mysql://127.0.0.1:3306/test?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai&useSSL=false&verifyServerCertificate=false&autoReconnect=true&failOverReadOnly=false");
  141. config.setUsername("root");
  142. config.setPassword("123");
  143. config.setDriverClassName("com.mysql.cj.jdbc.Driver");
  144. return config;
  145. }
  146. private DatabaseConfig createPostgresConfig() {
  147. DatabaseConfig config = new DatabaseConfig();
  148. config.setUrl("jdbc:postgresql://127.0.0.1:5432/postgres");
  149. config.setUsername("postgres");
  150. config.setPassword("123456");
  151. config.setDriverClassName("org.postgresql.Driver");
  152. return config;
  153. }
  154. }