如果您对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)
- @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)
在应用程序服务器中创建JNDI
JDBC连接池时,我始终将类型指定为javax.sql.ConnectionPoolDataSource
。我从来没有考虑过太多,因为与非池化连接相比,更喜欢池化连接似乎很自然。
但是,在查看一些示例(专门针对Tomcat)时,我注意到它们指定了javax.sql.DataSource
。此外,似乎还有设置maxIdle
,maxWait
给人的印象是这些连接也被合并。无论选择的数据源类型如何,Glassfish都允许这些参数。
- 是否
javax.sql.DataSource
集中在应用程序服务器(或servlet容器)中? - 什么(如果有的话)的优势在那里为选择
javax.sql.ConnectionPoolDataSource
了javax.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}) 有点疑惑,故记之。
exclude,排除此类的AutoConfig,即禁止 SpringBoot 自动注入数据源配置,怎么讲?
DataSourceAutoConfiguration.class 会自动查找 application.yml 或者 properties 文件里的 spring.datasource.* 相关属性并自动配置单数据源「注意这里提到的单数据源」。
那么问题来了,排除了自动配置,Spring还怎么识别到数据库配置呢?
答:显然接下来就需要手动配置,what?那我为什么要排除?然后手动指定数据源?
如果你发现项目中存在这个排除的骚操作,可以在项目中搜一下Java关键字@ConfigurationProperties("spring.datasource ,你可能会发现手动配置数据源的类。
再来回答为何要手动配置数据源,因为要配置多数据源,上边有提到DataSourceAutoConfiguration.class默认会帮我们自动配置单数据源,所以,如果想在项目中使用多数据源就需要排除它,手动指定多数据源。
详细资料,百度SpringBoot多数据源配置。
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...
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
对于入门的学僧来说,还没有系统的去学一门语言,程序报错确实是 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或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等相关内容,可以在本站寻找。
本文标签: