我正在开发一个具有java 8和应用程序标准环境的云端点框架API。我试图从Cloud SQL中检索一些信息,现在还可以,但是每种方法都会创建一个新的数据库连接池,这有点低效。如何只创建一个连接池并在每种方法中重用它?
现在我使用 createConnectionPool() 方法来连接,但这就是问题所在,因为每个方法调用都会调用它,我需要的是重用它。
我试图实现另一个实现 ServletContextListener 的类,负责创建连接池并存储它,以便能够从实现 API 的类中使用它。但是,我不知道如何从最后一堂课中重用它
这是创建连接池() 的代码
private DataSource createConnectionPool() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl(String.format("jdbc:mysql:///%s", DB_NAME));
config.setUsername(DB_USER);
config.setPassword(DB_PASS);
config.addDataSourceProperty("socketFactory", "com.google.cloud.sql.mysql.SocketFactory");
config.addDataSourceProperty("cloudSqlInstance", CLOUD_SQL_CONNECTION_NAME);
config.addDataSourceProperty("useSSL", "false");
config.setMaximumPoolSize(5);
config.setMinimumIdle(5);
config.setConnectionTimeout(10000); // 10 seconds
config.setIdleTimeout(600000); // 10 minutes
config.setMaxLifetime(1800000); // 30 minutes
return new HikariDataSource(config);
}
这是 API 方法的代码
@ApiMethod(name = "pacientes", httpMethod = ApiMethod.HttpMethod.GET)
public Message pacientes(User user, @Named("id") Integer id) throws UnauthorizedException{
if (user == null) {
throw new UnauthorizedException(INVALID_CREDENTIALS);
}
Message resultadoConsulta = new Message();
final String queryPacientes="SELECT nombre FROM paciente WHERE idpaciente=? LIMIT ?" ;
final int LIMIT=1;
DataSource pool = createConnectionPool();
try (Connection conn = pool.getConnection();
PreparedStatement consultaPacientes = conn.prepareStatement(queryPacientes);){
consultaPacientes.setInt(1, id);
consultaPacientes.setInt(2, LIMIT);
try(ResultSet resultadoPacientes = consultaPacientes.executeQuery()){
泛舟湖上清波郎朗
相关分类