0

this is my sapplication.yml

spring:

datasource: type: com.zaxxer.hikari.HikariDataSource primary:

  serverName: localhost
  portNumber: 3306
  databaseName: ccoee
  username: root
  password:  root
  dataSourceClassName: com.mysql.cj.jdbc.Driver
secondary:
  serverName: localhost
  portNumber: 3306
  databaseName: ccoee
  username: root
  password:  root
  dataSourceClassName: com.mysql.cj.jdbc.Driver

this is my starter:

ApplicationContext applicationContext = SpringApplication.run(
            TransqlApplication.class, args);
    DataSource dataSource = applicationContext.getBean(DataSource.class);
    System.out.println("datasource is :" + dataSource);
    //检查数据库是否是hikar数据库连接池
    if (!(dataSource instanceof HikariDataSource)) {
        System.err.println(" Wrong datasource type :"
                + dataSource.getClass().getCanonicalName());
        System.exit(-1);
    }
    try {
        Connection connection = dataSource.getConnection();
        ResultSet rs = connection.createStatement()
                .executeQuery("SELECT  1");
        if (rs.first()) {

            System.out.println("Connection OK!");
        } else {
            System.out.println("Something is wrong");
        }
        // connection.close();
        // System.exit(0);

    } catch (SQLException e) {
        System.out.println("FAILED");
        e.printStackTrace();
        System.exit(-2);
        // TODO: handle exception
    }

and this my exception:

datasource is :HikariDataSource (null)

2017-11-21 10:10:33.126Exception in thread "main" java.lang.RuntimeException: java.lang.ClassCastException: Cannot cast com.mysql.cj.jdbc.Driver to javax.sql.DataSource INFO at com.zaxxer.hikari.util.UtilityElf.createInstance(UtilityElf.java:93) 676 --- at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:338) [ main] at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:117) com.zaxxer.hikari.HikariDataSource at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:109) : at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:97) HikariPool-1 - Starting... at com.mycjj.transql.TransqlApplication.main(TransqlApplication.java:51) Caused by: java.lang.ClassCastException: Cannot cast com.mysql.cj.jdbc.Driver to javax.sql.DataSource at java.lang.Class.cast(Class.java:3369) at com.zaxxer.hikari.util.UtilityElf.createInstance(UtilityElf.java:82) ... 5 more 2017-11-21 10:10:34.204 ERROR 676 --- [pool-1-thread-1] com.mycjj.transql.GetSql : 数据库连接异常,请检查地址/账号/密码是否正确

筱白to
  • 1
  • 1

1 Answers1

1

A JDBC driver class is not a javax.sql.DataSource. You shouldn't be using the dataSourceClassName property, use the driverClassName property.

Also, com.mysql.cj.jdbc.Driver is the class name of a development version of MySQL Connector/J 6.0 (which has been abandoned) or 8.0 (which is still in development). It is - at this time - not a released version, and you should not use it in production.

Mark Rotteveel
  • 100,966
  • 191
  • 140
  • 197