“如果换成USB 接口键盘 扫描q不能输出到电脑上 键盘能使用”,这种情况是因为扫描q是键盘接口,需要在扫描q分线接口那里再接一个PS/2的键盘,扫描q才可以使用(前提是扫描q是正常的)。或者,将扫描q设置为“STANDALONE”模式。
Spring 3.1为这个问题提供了一个解决方案(如果你还没有为自己的项目升级Spring版本,嗯,你麻烦大了)。Spring在容器中引入Environment和Profile的概念。每个应用程序上下文都有一个都可以访Environment对象。
ClassPathXmlApplicationContext classPathXmlApplicationContext =
new ClassPathXmlApplicationContext()
ConfigurableEnvironment configurableEnvironment =
classPathXmlApplicationContext.getEnvironment()
每种运行环境都有很多活动Profile类可供使用。大多数讲解Spring Profile的例子都是在开发模式或生产模式下。对于不同运行环境问题来说,我的解决方案是使用使用多个Profile来适应不同运行时。这个解决方案的优势是你可以自行决定如何使用Profile。
默认星空情况下,你所创建的Bean在载入容器中后是没有Profile对象的。下面看一个例子。假设下面是我的应用程序中,数据源实例的定义。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="…">
<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"/>
<property name="password" value=""/>
</bean>
</beans>
在Spring 3.0中,增加了一个新的容器类GenericXmlApplicationContext ,可以作为ClassPathXmlApplicationContext和FileSystemXmlApplicationContext之外的另一个选择。
GenericXmlApplicationContext类的特点是可以通过Setter方法完成所有的配置,而无需依靠笨重的构造器去完成配置。记住,在初始化容器的准备工作完成后,需要调用refresh()方法完成实际的初始化工作。
下面的代码展示了如何使用GenericXmlApplicationContext类初始化容器:
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext()
ctx.getEnvironment().setActiveProfiles("standalone")
ctx.load("*Context.xml")
ctx.refresh()
这里,我将活动Profile设置为“standalone”。在这个工程里,我希望代码既可以作为“standalone”运行在应用程序容器之外,还可以作为“container”运行在容器中。这里,我可以设置多个Profile,例如,下面的代码设置了Profile为“standalone”与“activemq”。
1
ctx.getEnvironment().setActiveProfiles("standalone", "activemq")
虽然做了上面的配置,实际上并不会对当前的配置上下文产生影响,因为还没有配置Profile实例。所以,修改配置上下文为:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="…" profile="standalone">
<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"/>
<property name="password" value=""/>
</bean>
</beans>
只有当活动Profile设置为“standalone”时,才会实例化这个Bean。Profile是Bean的属性,而不是一个实例对象,因此,你无法配置单独的Bean来选择Profile。在较早的Spring版本中,这会导致产生多个文件,而Ant的通配符无法在运行时找到正确的配置文件。
在Spring 3.1中,<beans/>标签可以嵌套在<beans/>标签内。现在,我们重新编写一下数据源配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="…">
<beans profile="standalone">
<bean id="dataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:hsql://localhost"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
</beans>
<beans profile="container">
<jee:jndi-lookup id="dataSource" jndi-name="java:mydatasource"/>
</beans>
</beans>
这样,就可以通过下面的代码快速切换Profile:
ctx.getEnvironment().setActiveProfiles("container")
另一种切换Profile的方法是在运行时作为系统参数传入:
-Dspring.profiles.active="standalone"
此外,也可以作为Ear/War的初始化参数传入:
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>spring.profiles.active</param-name>
<param-value>production</param-value>
</init-param>
</servlet>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)