NutzCN Logo
问答 dao.xml怎么写
发布于 2767天前 作者 老司机 2835 次浏览 复制 上一个帖子 下一个帖子
标签:

这是我写的xml

<?xml version="1.0" encoding="UTF-8"?>
<ioc>
	<dao>
		<type>org.nutz.dao.impl.NutzDao</type>
		<args>[{refer:"dataSource"}]</args>
	</dao>
	<dataSource>
		<type>"org.nutz.dao.impl.SimpleDataSource"</type>
		<fields>
			<jdbcUrl>jdbc:mysql://localhost:5566/nutzbook</jdbcUrl>
			<username>root</username>
			<password>3.1415926c</password>
		</fields>
	</dataSource>
</ioc>

java

public class NutzDao {
	public static void main(String[] args) {
		Ioc ioc = new NutIoc(new XmlIocLoader("dao.xml"));
		DataSource ds = ioc.get(DataSource.class);
		Dao dao = new NutDao(ds);
		ioc.depose();
	}
}

报错

2016-8-31 11:1:5.514 WARN [main] !!You are using default SystemLog! Don't use it in Production environment!!
2016-8-31 11:1:5.538 INFO [main] Nutz is licensed under the Apache License, Version 2.0 .
Report bugs : https://github.com/nutzam/nutz/issues
2016-8-31 11:1:5.682 DEBUG [main] Locations for Scans:
[JarResourceLocation [jarPath=E:\UtilsJar\nutz\mysql-connector-java-5.1.37.jar], JarResourceLocation [jarPath=E:\UtilsJar\nutz\druid-1.0.16.jar], FileSystemResourceLocation [root=E:\EclipseWorkSpace\Java\nutzDao\bin], FileSystemResourceLocation [root=E:\EclipseWorkSpace\Java\nutzDao], JarResourceLocation [jarPath=E:\UtilsJar\nutz\nutz-1.b.53.jar]]
2016-8-31 11:1:5.686 DEBUG [main] Found 1 resource by src( dao.xml ) , regex( .+[.]xml$ )
Exception in thread "main" java.lang.RuntimeException: Name of bean is not unique! name=
	at org.nutz.lang.Lang.makeThrow(Lang.java:99)
	at org.nutz.ioc.loader.xml.XmlIocLoader.paserBean(XmlIocLoader.java:114)
	at org.nutz.ioc.loader.xml.XmlIocLoader.<init>(XmlIocLoader.java:77)
	at org.nutz.dao.impl.NutzDao.main(NutzDao.java:12)
2016-8-31 11:1:5.708 DEBUG [main] Resolving bean define, name = 
2016-8-31 11:1:5.710 DEBUG [main] Resolved bean define, name = 
14 回复

用json

来自炫酷的 NutzCN

想要达到的功能是,用户自己输入自己数据库用户名和密码,然后自动修改dao.xml,让nutz在客户那边跑起来,或者换个思路,我会用java修改xml但是不会用java修改js里面的json,如果能修改js里的json也行

只是为了改数据库参数吗?

对的,项目要求在用户第一次运行的时候输入自己数据库用户名和密码,我想这样就得修改静态文件,不然每次都要重输,而我还想不到怎么改js里面的json,只会改xml里面的数据

还有啊,怎么才能修改端口号和数据库名称呢?我想实在不行不用修改,用户输入的时候重新生成js或者xml覆盖原有配置……还是那句话,用java对xml进行增删改查都没问题,但是对js……我还没啥办法啊

@qq_c1bab051 用的是哪个版本

来自炫酷的 NutzCN

把dao.js改成这样

var ioc={
		conf : {
			type : "org.nutz.ioc.impl.PropertiesProxy",
			fields : {
				paths : ["custom/"]
			}
		},
	    dataSource : {
	        type : "com.alibaba.druid.pool.DruidDataSource",
	        events : {
	        	create : "init",
	            depose : 'close'
	        },
	        fields : {
	            url : {java:"$conf.get('db.url')"},
	            username : {java:"$conf.get('db.username')"},
	            password : {java:"$conf.get('db.password')"},
	            testWhileIdle : true,
	            validationQuery : {java:"$conf.get('db.validationQuery')"},
	            maxActive : {java:"$conf.get('db.maxActive')"},
	            filters : "mergeStat",
	            connectionProperties : "druid.stat.slowSqlMillis=2000",
	            defaultAutoCommit : false
	        }
	    },
		dao : {
			type : "org.nutz.dao.impl.NutDao",
			args : [{refer:"dataSource"}]
		}
};

然后建个custom目录, 里面建个db.properties

db.url=jdbc:mysql://127.0.0.1:3306/nutzbook
db.username=root
db.password=root
db.validationQuery=select 1
db.maxActive=50
db.testWhileIdle=true
db.filters=mergeStat
db.connectionProperties=druid.stat.slowSqlMillis=2000
db.defaultAutoCommit=true

这样,客户改db.properties就可以了,无需修改js/xml文件.

核心就是

{java:"$conf.get('db.url')"}

从conf(配置文件)中取值,而不是写死.

@wendal 现在要读一个项目外的静态文件db.properties,dao.js中的path该怎么写?比如我放在d:盘下的某个文件夹内

paths接收的字符串数组,可以写绝对路径

来自炫酷的 NutzCN

@wendal 现在有个丧心命狂的要求,db.properties里面的密码不能是明文,要是密文,总之就是不能直接看,需要通过java后台解密后才能有明文,这该如何是好!

其实呢, 继承PropertiesProxy, 在获取密码的时候额外处理一下就搞定了.

添加回复
请先登陆
回到顶部