GVKun编程网logo

Application Server JDBC资源的DataSource或ConnectionPoolDataSource(jdbcsystemresourcembean)

14

如果您对ApplicationServerJDBC资源的DataSource或ConnectionPoolDataSource感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于

如果您对Application Server JDBC资源的DataSource或ConnectionPoolDataSource感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于Application Server JDBC资源的DataSource或ConnectionPoolDataSource的详细内容,我们还将为您解答jdbcsystemresourcembean的相关问题,并且为您提供关于@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})注解作用、BasicDatasource和PoolingDatasource之间的区别、Caused by: org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreatio...、com.alibaba.druid.pool.DruidDataSource : create connection error的有价值信息。

本文目录一览:

Application Server JDBC资源的DataSource或ConnectionPoolDataSource(jdbcsystemresourcembean)

Application Server JDBC资源的DataSource或ConnectionPoolDataSource(jdbcsystemresourcembean)

在应用程序服务器中创建JNDI
JDBC连接池时,我始终将类型指定为javax.sql.ConnectionPoolDataSource。我从来没有考虑过太多,因为与非池化连接相比,更喜欢池化连接似乎很自然。

但是,在查看一些示例(专门针对Tomcat)时,我注意到它们指定了javax.sql.DataSource。此外,似乎还有设置maxIdlemaxWait给人的印象是这些连接也被合并。无论选择的数据源类型如何,Glassfish都允许这些参数。

  • 是否javax.sql.DataSource集中在应用程序服务器(或servlet容器)中?
  • 什么(如果有的话)的优势在那里为选择javax.sql.ConnectionPoolDataSourcejavax.sql.DataSource(反之亦然)?

答案1

小编典典

是的,默认情况下,Tomcat确实对定义为JNDI上下文资源的数据源使用Apache DBCP池。

从位于http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-
howto.html#JDBC_Data_Sources的文档中

注意-
Tomcat中的默认数据源支持基于Commons项目中的DBCP连接池。但是,可以通过编写您自己的自定义资源工厂来使用实现javax.sql.DataSource的任何其他连接池,如下所述。

挖掘Tomcat 6的消息源显示,它们以这种方式获取连接工厂(以防万一,如果您不使用Context的“ factory”属性指定自己的连接工厂):

ObjectFactory factory = (ObjectFactory)Class.forName(System.getProperty("javax.sql.DataSource.Factory", "org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory")).newInstance();
实现javax.naming.spi.ObjectFactory的org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory负责创建DataSource实例:[http](http://www.jarvana.com/jarvana/view/org/apache/tomcat/tomcat-
dbcp/7.0.2/tomcat-
dbcp-7.0.2-sources.jar!/org/apache/tomcat/dbcp/dbcp/BasicDataSourceFactory.java?format=ok)
//www.jarvana.com/jarvana/view/org/apache/tomcat/tomcat- dbcp / 7.0.2 /
tomcat-
dbcp-7.0.2-sources.jar!/org/apache/tomcat/dbcp/dbcp/BasicDataSourceFactory.java?format
= ok
我看到他们创建了org.apache.tomcat.dbcp.dbcp.BasicDataSource的实例:[http](http://www.jarvana.com/jarvana/view/org/apache/tomcat/tomcat-
dbcp/7.0.2/tomcat-
dbcp-7.0.2-sources.jar!/org/apache/tomcat/dbcp/dbcp/BasicDataSource.java?format=ok)
//www.jarvana.com/jarvana/view/org/apache/tomcat/tomcat-dbcp/7.0.2/tomcat-
dbcp-
7.0.2-sources.jar!/org/apache/tomcat/dbcp/dbcp/BasicDataSource.java?format =
ok

奇怪的是,此类本身并没有实现ConnectionPoolDataSource,org.apache.tomcat.dbcp.dbcp.PoolingDataSource也没有实现,它由BasicDataSource内部返回
http://www.jarvana.com/jarvana/view/org/apache/tomcat /tomcat-
dbcp/7.0.2/tomcat-
dbcp-7.0.2-sources.jar!/org/apache/tomcat/dbcp/dbcp/PoolingDataSource.java?format=ok

因此,我假定当您将DataSources配置为javax.sql.ConnectionPoolDataSource时,您还使用了一些自定义工厂(这只是一个猜测,但我想否则您将在Tomcat中具有类强制转换异常,因为它们的池并没有真正提供javax.sql.ConnectionPoolDataSource的实例,仅javax.sql.DataSource的实例)。

因此,要回答有关特定情况的优缺点的问题,应将Apache DBCP与数据源工厂中的池化机制进行比较,无论使用哪种方式。

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})注解作用

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})注解作用

有小伙伴在群里问到对 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class}) 有点疑惑,故记之。

exclude,排除此类的AutoConfig,即禁止 SpringBoot 自动注入数据源配置,怎么讲?

DataSourceAutoConfiguration.class 会自动查找 application.yml 或者 properties 文件里的 spring.datasource.* 相关属性并自动配置单数据源「注意这里提到的单数据源」。

那么问题来了,排除了自动配置,Spring还怎么识别到数据库配置呢?

答:显然接下来就需要手动配置,what?那我为什么要排除?然后手动指定数据源?

如果你发现项目中存在这个排除的骚操作,可以在项目中搜一下Java关键字@ConfigurationProperties("spring.datasource ,你可能会发现手动配置数据源的类。

再来回答为何要手动配置数据源,因为要配置多数据源,上边有提到DataSourceAutoConfiguration.class默认会帮我们自动配置单数据源,所以,如果想在项目中使用多数据源就需要排除它,手动指定多数据源。

详细资料,百度SpringBoot多数据源配置。

BasicDatasource和PoolingDatasource之间的区别

BasicDatasource和PoolingDatasource之间的区别

org.apache.commons.dbcp
BasicDatasource和PoolingDataSoure有什么区别?两者都支持连接池吗?什么时候使用它们?

答案1

小编典典

*正如 Javadoc所说,
*BasicDataSource

是满足基本需求的一站式服务。它具有所有必要的条件。它在内部创建一个PoolableDataSource和一个ObjectPool。

PoolingDataSource
使用提供的ObjectPool实现DataSource接口。PoolingDatasource负责与连接有关的任何事情(广播,检查有效性,设置属性等),而ObjectPool负责保存和计算此“无论是什么类型”对象。

所以 我应该使用BasicDataSource
。如果您需要一些特殊的东西,可以将PoolingDatasource与ObjectPool的另一个实现一起使用。但是我认为这是一种罕见的情况。

Caused by: org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreatio...

Caused by: org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreatio...

 1 Caused by: org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath. If you have database settings to be loaded from a particular profile you may need to active it (the profiles "local" are currently active).
 2     at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.determineDriverClassName(DataSourceProperties.java:247)
 3     at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.initializeDataSourceBuilder(DataSourceProperties.java:184)
 4     at org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration.createDataSource(DataSourceConfiguration.java:42)
 5     at org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration$Tomcat.dataSource(DataSourceConfiguration.java:56)
 6     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 7     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 8     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 9     at java.lang.reflect.Method.invoke(Method.java:498)
10     at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
11     ... 116 common frames omitted

报错原因:项目的bootstrap.yml中,config-server没有配置正确(如下14行):应该配置为config-server的名字,我配置成了项目名称

 1 spring:
 2   profiles:
 3     active: local
 4   application:
 5     name: xxx-server
 6   cloud:
 7     config:       
 8       name: ${spring.application.name}
 9       profile: ${config.profile:dev}
10       username: ${myauth.config.username}
11       password: ${myauth.config.password}
12       discovery:
13         enabled: true #使用服务发现组件中的Config Server,默认false
14         service-id: config-server  #Config Server的名字,默认configserver

 

com.alibaba.druid.pool.DruidDataSource   : create connection error

com.alibaba.druid.pool.DruidDataSource : create connection error

对于入门的学僧来说,还没有系统的去学一门语言,程序报错确实是 An egg painfully question.

运行项目时碰到有个错误:

2018-11-04 16:06:35.841 ERROR 8660 --- [reate-352468633] com.alibaba.druid.pool.DruidDataSource   : create connection error, url: jdbc:mysql://127.0.0.1:3306/mytest?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true, errorCode 0, state 01S00

java.sql.SQLException: The server time zone value ''Öйú±ê׼ʱ¼ä'' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

找到关键字,一番度娘,在大神博客找到 https://blog.csdn.net/chinafire525/article/details/80083226 找到解答,

在 jdbc:mysql://127.0.0.1:3306/mytest?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true  上加:&serverTimezone=UTC 完美解决

 

关于Application Server JDBC资源的DataSource或ConnectionPoolDataSourcejdbcsystemresourcembean的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})注解作用、BasicDatasource和PoolingDatasource之间的区别、Caused by: org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreatio...、com.alibaba.druid.pool.DruidDataSource : create connection error等相关内容,可以在本站寻找。

本文标签: