druid数据连接池实例化失败的问题
来源:互联网 发布:sql如何导入数据库 编辑:程序博客网 时间:2024/06/03 04:52
最近在用druid的数据库连接池,在eclipse代码运行正常,当打包成jar就会报
java.lang.NoClassDefFoundError: Could not initialize class***的错误,因为开发进度的原因只能抽时间查问题.后来发现是连接池类中static初始化的问题.原来参考的代码出处:点击打开链接.
其中涉及到静态块、静态变量、静态方法、构造函数的加载顺序,不清楚的可以自己写个简单的程序测试一下。
问题总结:
1.java.lang.NoClassDefFoundError: Could not initialize class错误提示不是找不到类,与NoClassFoundException错误不要混淆。
2.在IDE运行正常,但是打包后异常,可能与加载的properties等文件的编码格式错误读取不到有关。(应该不会有人忘记把相关文件放到目录下吧?)
3.应当熟悉单例模式内涵,关于单例模式大把的高人总结.
更改后代码:
import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.sql.SQLException;import java.util.Properties;import com.alibaba.druid.pool.DruidDataSource;import com.alibaba.druid.pool.DruidDataSourceFactory;import com.alibaba.druid.pool.DruidPooledConnection;import com.since.emp.service.OrderSyncs;/** * 要实现单例模式,保证全局只有一个数据库连接池 */public class DbPoolConnection {String logTitle = "DBPoolConnection";private static DbPoolConnection dbPoolConnection = null;private static DruidDataSource druidDataSource = null;static { Init(); } private DbPoolConnection() { } private static void Init() {try {Properties properties = loadPropertiesFile("db.properties");OrderSyncs.logger.info("【logTitle】"+"读取文件成功");druidDataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); // DruidDataSrouce工厂模式} catch (Exception e) {OrderSyncs.logger.info("【logTitle】"+"获取配置失败");}} /** * 数据库连接池单例 * * @return */public static synchronized DbPoolConnection getInstance() {if (null == dbPoolConnection) {dbPoolConnection = new DbPoolConnection();}return dbPoolConnection;}/** * 返回druid数据库连接 * * @return * @throws SQLException */public DruidPooledConnection getConnection() throws SQLException {return druidDataSource.getConnection();}/** * @param string * 配置文件名 * @return Properties对象 */private static Properties loadPropertiesFile(String fullFile) {if (null == fullFile || fullFile.equals("")) {throw new IllegalArgumentException("Properties file path can not be null" + fullFile);}InputStream inputStream = null;Properties p = null;try {inputStream = new FileInputStream(new File(fullFile));//原来是决定路径,现在用相对路径p = new Properties();p.load(inputStream);} catch (Exception e) {e.printStackTrace();} finally {try {if (null != inputStream) {inputStream.close();}} catch (Exception e) {e.printStackTrace();}}return p;}}
阅读全文
0 0
- druid数据连接池实例化失败的问题
- druid连接池问题
- Java Druid大数据连接池的实例应用 和工具类
- 国产数据连接池Druid
- 关于druid连接池,无法获取连接的问题
- 数据连接池c3p0和druid的简单配置
- druid连接池的使用。
- DRUID连接池的使用
- DRUID连接池的使用
- DRUID连接池的使用
- druid连接池的补充
- DRUID连接池的使用
- druid数据连接池jar包
- Druid数据连接池源码分析
- c3p0数据连接池更换为druid
- DRUID- 数据扁平化需要注意的问题
- druid连接池配置Druid
- alibaba/druid DRUID连接池的实用 配置详解
- flex布局(2)
- PyQT禁止窗口最大化按钮
- 错误代码:枚举之画家问题
- 微信JSAPI的调用配置
- spring-boot logback配置
- druid数据连接池实例化失败的问题
- 26:字符串最大跨距
- 请求乱码问题
- 加载jdbc驱动程序的三种不同方式
- 友盟分享的集成
- js如何添加鼠标右击事件
- Android WebView加载后有白边框的问题
- Aggressive cows
- 【转】Java 9 新特性汇总