我使用axis2和POJO部署(到Tomcat服务器)用Java编写了一个Web服务。我的服务打开了与MySQL数据库的连接。为此,我需要连接字符串。我在哪里放置连接字符串,所以我不必在代码中硬编码?我如何从代码中访问它?我想在服务级别的某处设置此参数,而不是整个服务器的全局参数。这可能吗?
答案 0 :(得分:1)
您可以使用tomcat为您配置数据库连接,然后使用JNDI查找javax.sql.DataSource。
看看tomcat的这些:
使用JNDI还意味着,如果您需要移动到其他Web容器/应用服务器,您将自动变得更加兼容。
答案 1 :(得分:1)
如果您想使用配置文件,可以在以下位置放置一个:
axis2/WEB-INF/services/classes/config-file.xml
您可以使用AxisService类加载器在代码中访问此文件,该类加载器在startUp(ConfigurationContext configctx,AxisService服务)方法期间可用。启动服务时(部署后或容器重启后)会触发startUp()。
import org.apache.axis2.engine.ServiceLifeCycle;
public class LifeCycleImpl implements ServiceLifeCycle {
public void startUp(ConfigurationContext configctx, AxisService service) {
InputStream in = service.getClassLoader().getResourceAsStream("config-file.xml");
//Extract your database config from the input stream
//Create database connection
//Store the connection as a service parameter using service.AddParameter
}
在服务实现类的init(ServiceContext serviceContext)
方法中,您可以通过ServiceLifeCycle.startUp()
方法访问在ServiceContext.getAxisService().getParamterValue()
期间创建的数据库连接。
注意:您必须在服务的services.xml
文件中指定ServiceLifeCycle实施类,作为class
标记的service
属性:
<!-- The class attribute defines the hook into the Service lifecycle methods
startUp and shutDown -->
<service name="YourService" class="com.macima.webservice.LifeCycleImpl">
<!--Specify the web service's implementation class -->
<parameter name="ServiceClass">com.macima.webservice.ServiceImpl</parameter>
<!--Declare methods exposed by the web service-->
<operation name="getSomething">
<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</operation>
</parameter>
</service>
使用此方法,您的配置文件将保留在aar
文件之外。好处是您可以通过不同的测试环境提升相同的aar
文件,为环境特定的配置文件中的每个环境选取相关设置。此外,您可以编辑配置文件,而无需打开aar
文件。