改进dao.js

之前的dao.js把数据库信息都写死在里面, 这一小节把它独立到一个配置文件中

首先,在conf这个源文件夹中,再建一个文件夹custom,代表用户自定义的配置

新建custom文件夹

在custom文件夹中,建一个文件叫 db.properties

新建db.properties

在db.properties中填入如下内容,即当前可配置的数据库信息

  1. #mysql
  2. db.url=jdbc:mysql://127.0.0.1:3306/nutzbook
  3. db.username=root
  4. db.password=root
  5. #db.validationQuery=select 1
  6. db.maxActive=100
  7. db.testWhileIdle=true
  8. db.filters=mergeStat
  9. db.connectionProperties=druid.stat.slowSqlMillis=2000
  10. #db.defaultAutoCommit=true
  11. #oracle
  12. #db.url=jdbc:oracle:thin:@//192.168.72.101:1521/xe
  13. #db.username=system
  14. #db.password=oracle
  15. #db.validationQuery=select 1 from dual
  16. #db.maxActive=100
  17. #postgresql
  18. #db.url=jdbc:postgresql://127.0.0.1:5432/nutzbook
  19. #db.username=postgres
  20. #db.password=root
  21. #db.validationQuery=select 1
  22. #db.maxActive=100

druid参数简介

  • filters是druid定义的一些过滤器,其中mergeStat是带合并的sql状态过滤
  • connectionProperties配置中的2000代表如果sql执行超过2秒,就输出日志

提醒一下, Druid的SQL解析器遇到无法解析的SQL会报错,但不影响运行,若感觉不适,建议向druid提issue

或者将mergeStat改成stat也可以,只是统计SQL耗时的时候比较分散.

打开dao.js, 将其改造一下

  1. var ioc = {
  2. conf : {
  3. type : "org.nutz.ioc.impl.PropertiesProxy",
  4. fields : {
  5. paths : ["custom/"]
  6. }
  7. },
  8. dataSource : {
  9. factory : "$conf#make",
  10. args : ["com.alibaba.druid.pool.DruidDataSource", "db."],
  11. type : "com.alibaba.druid.pool.DruidDataSource",
  12. events : {
  13. create : "init",
  14. depose : 'close'
  15. }
  16. },
  17. dao : {
  18. type : "org.nutz.dao.impl.NutDao",
  19. args : [{refer:"dataSource"}]
  20. }
  21. };

可以看到, 新增了一个叫conf的bean, 而dataSource中的一些field改为从conf读取

再来个当前项目的一览图

dao.js改造完成后的截图

检查无误后,启动tomcat,观察log, 可以看到加载了3个bean, 其中就包含刚刚定义的conf

  1. 2015-04-09 18:39:39,786 org.nutz.ioc.loader.json.JsonLoader.<init>(JsonLoader.java:44) DEBUG - loading ioc js config from [dao.js]
  2. 2015-04-09 18:39:39,791 org.nutz.ioc.loader.json.JsonLoader.<init>(JsonLoader.java:52) DEBUG - Loaded 3 bean define from path=[ioc/] --> [conf, dao, dataSource]