NutzCN Logo
问答 Oracle数据库配置,启动时报错
发布于 2883天前 作者 qq_cd009102 1550 次浏览 复制 上一个帖子 下一个帖子
标签:

问题描述

新手学习,跟着视频做,开始用的是h2数据库,项目正常启动,后来想配置到自己本地的Oracle服务,本地Oracle没有问题,plsql可以正常连接使用。然后开始把h2的配置修改,改完后启动报错如下(另相关配置文件,见下):

org.nutz.ioc.IocException: Fail to find Method oracle.jdbc.driver.OracleDriver->close with params:
[] For object [dataSource] - type:[] FAIL to create Ioc Bean name=[dao]
	at org.nutz.ioc.impl.ObjectMakerImpl.make(ObjectMakerImpl.java:147)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:204)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:229)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:148)
	at net.wonders.nutz.MainSetup.init(MainSetup.java:21)
	at org.nutz.mvc.impl.NutLoading.evalSetup(NutLoading.java:276)
	at org.nutz.mvc.impl.NutLoading.load(NutLoading.java:120)
	at org.nutz.mvc.ActionHandler.<init>(ActionHandler.java:19)
	at org.nutz.mvc.NutFilter._init(NutFilter.java:87)
	at org.nutz.mvc.NutFilter.init(NutFilter.java:65)
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
	at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3709)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4356)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
	at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:924)
	at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:887)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1147)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:516)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: org.nutz.ioc.IocException: Fail to find Method oracle.jdbc.driver.OracleDriver->close with params:
[] For object [dataSource] - type:[]
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:211)
	at org.nutz.ioc.val.ReferValue.get(ReferValue.java:24)
	at org.nutz.ioc.impl.ObjectMakerImpl.make(ObjectMakerImpl.java:75)
	... 36 more
Caused by: java.lang.NoSuchMethodException: Fail to find Method oracle.jdbc.driver.OracleDriver->close with params:
[]
	at org.nutz.lang.Mirror.findMethod(Mirror.java:1140)
	at org.nutz.ioc.impl.ObjectMakerImpl.createTrigger(ObjectMakerImpl.java:169)
	at org.nutz.ioc.impl.ObjectMakerImpl.make(ObjectMakerImpl.java:52)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:204)
	... 38 more

dao.js

var ioc = {
		config : {
			type : "org.nutz.ioc.impl.PropertiesProxy",
			fields : {
		        paths : ["custom/database.properties"]
		    }
		},
		dataSource : {
			type : "oracle.jdbc.driver.OracleDriver",
			fields : {
				db.url            : {java : "$config.get('db.url')"},
				db.dialect        : {java : "$config.get('db.dialect')"},
				db.username       : {java : "$config.get('db.username')"},
				db.password       : {java : "$config.get('db.password')"},
				db.testWhileIdle  : {java : "$config.get('db.testWhileIdle')"},
				db.validationQuery: {java : "$config.get('db.validationQuery')"},
				db.maxActive      : {java : "$config.get('db.maxActive')"},
				db.maxWait        : {java : "$config.get('db.maxWait')"},
				db.minIdle        : {java : "$config.get('db.minIdle')"},
				db.maxIdle        : {java : "$config.get('db.maxIdle')"}
			},
			events : {
				create : "init",
				depose : "close"
			}
		},
		dao : {
			type : "org.nutz.dao.impl.NutDao",
            args : [{refer:"dataSource"}]
		}
};

database.properties

db.url=jdbc:oracle:thin:@localhost:1521:orcl
db.dialect=org.hibernate.dialect.Oracle10gDialect
db.username=lsx
db.password=123456
db.testWhileIdle=false
db.validationQuery=SELECT COUNT(*)FROM DUAL
db.maxActive=20
db.maxWait=10000
db.minIdle=1
db.maxIdle=20

以上,望大神指教一下~新手勿喷,谢谢~~~

3 回复

本人回答
新手就是新手,经验不足,编码能能力差。
上面的问题已解决,少了driverClassName的配置。然后Druid连接池不支持Oracle的dialect,把这个配置去掉,启动,就不会报这个错误了。
然而又出现别的问题,自己慢慢解决~

我就想问问, 这是哪里抄来的写法? 完全不对好不好

		dataSource : {
			type : "oracle.jdbc.driver.OracleDriver", // 这里写的是数据库连接池的类名,不是驱动
			fields : {
				db.url            : {java : "$config.get('db.url')"}, // Java字段名还能叫"db.url"的?
				db.dialect        : {java : "$config.get('db.dialect')"},
				db.username       : {java : "$config.get('db.username')"},
				db.password       : {java : "$config.get('db.password')"},
				db.testWhileIdle  : {java : "$config.get('db.testWhileIdle')"},
				db.validationQuery: {java : "$config.get('db.validationQuery')"},
				db.maxActive      : {java : "$config.get('db.maxActive')"},
				db.maxWait        : {java : "$config.get('db.maxWait')"},
				db.minIdle        : {java : "$config.get('db.minIdle')"},
				db.maxIdle        : {java : "$config.get('db.maxIdle')"}
			},
			events : {
				create : "init",
				depose : "close"
			}
		},

@wendal 是抄错了,然后自己看出来了(自己脸都红了!~)改完之后的东西如下
dao.js

var ioc = {
		config : {
			type : "org.nutz.ioc.impl.PropertiesProxy",
			fields : {
		        paths : ["custom/database.properties"]
		    }
		},
		dataSource : {
			type : "com.alibaba.druid.pool.DruidDataSource",
			fields : {
				driverClassName : {java : "$config.get('db.driverClassName')"},
				url : {java : "$config.get('db.url')"},
				username : {java : "$config.get('db.username')"},
				password : {java : "$config.get('db.password')"},
				testWhileIdle : {java : "$config.get('db.testWhileIdle')"},
				validationQuery : {java : "$config.get('db.validationQuery')"},
				maxActive : {java : "$config.get('db.maxActive')"},
				maxWait : {java : "$config.get('db.maxWait')"},
				minIdle : {java : "$config.get('db.minIdle')"},
				maxIdle : {java : "$config.get('db.maxIdle')"}
			},
			events : {
				create : "init",
				depose : "close"
			}
		},
		dao : {
			type : "org.nutz.dao.impl.NutDao",
            args : [{refer:"dataSource"}]
		}
};

database.properties

db.driverClassName=oracle.jdbc.driver.OracleDriver
db.url=jdbc:oracle:thin:@localhost:1521:orcl
db.username=lsx
db.password=123456
db.testWhileIdle=false
db.validationQuery=SELECT COUNT(*)FROM DUAL
db.maxActive=20
db.maxWait=10000
db.minIdle=1
db.maxIdle=20
添加回复
请先登陆
回到顶部