我有一个使用上下文敏感数据源的应用程序。目前我保存了数据源信息
reqeust.DB.Datasource = "DatasourceName";
request.DB.Username = "DatasourceUsername"
request.DB.Password = "DatasourcePassword"
然后我根据上下文覆盖变量,因此每个cfquery标签都有datasource =“#request.DB.Datesource#”......等等......
我想开始转向更多以CFC为中心的框架,比如Coldbox,但我不知道这是如何运作的。
我是否需要将数据源对象传入CFC的init语句?这似乎是一个超级PITA。
答案 0 :(得分:3)
使用CF9,您可以将Application.cfc中的this.datasource作为默认数据源。不幸的是,它似乎没有办法设置用户名/密码
无论
A。)使用依赖注入框架,如ColdSpring(仅适用于单件服务),Lightwire或Coldbox自己的DI解决方案(Wirebox)。并通过init
构造函数或setter注入数据源/用户名/密码。
B。)在<Datasources>
中设置Coldbox.xml.cfm
,请参阅:http://wiki.coldbox.org/wiki/ConfigurationFile.cfm
<!--Datasource Setup, you can then retreive a datasourceBean
via the getDatasource("name") method: -->
<Datasources>
<Datasource alias="MyDSNAlias"
name="real_dsn_name"
dbtype="mysql"
username=""
password="" />
</Datasources>
答案 1 :(得分:0)
即使您的对象仅在请求级别进行初始化,看起来以这种方式使用也不会太痛苦。
<cfscript>
request.DB.Datasource = "DatasourceName";
request.DB.Username = "DatasourceUsername";
request.DB.Password = "DatasourcePassword";
request.randomDAO = createObject('component','DAOStuff.randomDAO');
request.randomDAO.init(DBObject = request.DB);
request.someQuery = request.randomDAO.someGetter();
request.someOtherQuery = request.randomDAO.someOtherGetter();
request.aThirdQuery = request.randomDAO.aThirdGetter();
</cfscript>
相反:
<cfscript>
request.DB.Datasource = "DatasourceName";
request.DB.Username = "DatasourceUsername";
request.DB.Password = "DatasourcePassword";
</cfscript>
<cfquery name="request.someQuery"
datasource=request.DB.Datasource
username=request.DB.Username
password=request.DB.Password>
--SOME SQL HERE
</cfquery>
<cfquery name="request.someOtherQuery"
datasource=request.DB.Datasource
username=request.DB.Username
password=request.DB.Password>
--SOME SQL HERE
</cfquery>
<cfquery name="request.aThirdQuery"
datasource=request.DB.Datasource
username=request.DB.Username
password=request.DB.Password>
--SOME SQL HERE
</cfquery>
如果数据对象在应用程序级别存在是安全的(假设此处对象的数据源在运行时不会更改,并且您已编写了线程安全的CFC)您可以存储和初始化DAO在应用程序级别,然后每个请求都有非常简单的代码,如:
<cfscript>
request.someQuery = application.randomDAO.someGetter();
request.someOtherQuery = application.randomDAO.someOtherGetter();
request.aThirdQuery = application.randomDAO.aThirdGetter();
</cfscript>