spring的profile和Enviroment
Posted 乔不思
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring的profile和Enviroment相关的知识,希望对你有一定的参考价值。
原文链接 http://www.importnew.com/1099.html
我编写或设计的软件通常需要部署在不同的环境,也需要使用不同的部署配置。这些部署配置大致可以分为以下几类:
- Java企业级容器(包括JBoss、WebLogic、Tomcat、Glassfish等)
- 独立运行的Java应用程序
- GUI应用程序
- 测试框架
本文暂不对GUI应用程序进行讨论,留到后续再说。对于其他的类型(容器、独立应用程序和测试框架)来说,代码往往是相同的。因此,在设计或者编码这类软件的时候,这一点非常关键。对于每种场景来说,我所写的代码需要完美运行在每一种场景中。
这是程序合格并且健壮的关键!这里的问题是,有一些资源的配置是与代码的运行平台息息相关的。在我编写单元测试的时候,我无法(其实我能,这么说是为了让你领会文章的主题)获得绑定到JNDI树上的数据源。而在容器中,我只需要遍历JNDI树,询问是否可以获取数据源即可。
另外,想Spring这样的框架也是鼓励这样的开发模式的,至少控制反转挺受欢迎。不同于直接用代码配置数据库和队列,Spring框架是在运行时注入这些对象的,生活依然美好。
你以为我的博客会把网上到处都是控制反转的示例代码再罗列一遍么?当然不是。看下面的代码:
1 2 3 4 5 6 7 |
public
class
BusinessClazz
implements
SomethingReallyImportant
private
DataSource dataSource;
@Required
public
void
setDataSource(DataSource dataSource)
this
.dataSource = dataSource;
|
数据源是通过运行时注入获得的,BusinessClazz对数据源本身一无所知。我不是世上最聪明的人,但也肯定不是最笨的人。我是说,我曾经读过像《J2ee Development Without Ejb》和《Expert one-on-one J2EE design and development》这类的书,并且自以为已经理解了其中的内容。但这些都是给妹子们看的,不是么?开个玩笑。我在Spring中间了一个数据源实例,并注入到BusinessClazz实例中。
1 2 3 |
<
bean
name
=
"myBusinessClazz"
>
<
property
name
=
"dataSource"
ref
=
"dataSource"
/>
</
bean
>
|
现在,我的可以完全不考虑数据源的具体实现,仍能在所有的部署环境中运行。但对于数据源呢,应该如何配置才能保证“一次配置,到处运行”?我们将注重对数据源的配置做说明,这个例子也是用于那些因运行环境或运行时不同而需要做修改的组件。
一般情况下,数据源需要两部分配置信息。第一部分是关于数据库位于何处,以及如何连接该数据库的信息。这里需要的信息包括主机名、款口端口号、服务名等。
第二部分是关于如何展示描述配置信息的。下面是一些可选方案。在其中,我建立了一个到数据库的连接,
1 2 3 4 5 6 7 |
<
bean
id
=
"dataSource"
destroy-method
=
"close"
class
=
"org.apache.commons.dbcp.BasicDataSource"
>
<
property
name
=
"driverClassName"
value
=
"org.hsqldb.jdbcDriver"
/>
<
property
name
=
"url"
value
=
"jdbc:hsqldb:hsql://localhost"
/>
<
property
name
=
"username"
value
=
"sa"
/>
<
spring.profiles.active和spring.profiles.include的使用与区别
|