如何创建外部DataSource?WSO2 EI数据库连接配置求助
问题解答
你的理解完全正确
使用外部DataSource可以将数据库连接配置与CAR部署包解耦,避免每次切换生产环境都要修改数据服务的静态配置,只需在目标WSO2 EI服务器上调整数据源参数即可适配不同数据库地址。
配置指导
1. 在WSO2 EI中配置外部数据源
打开EI服务器目录下的 <EI_HOME>/repository/conf/datasources/master-datasources.xml,添加以下MySQL数据源配置(替换占位符为实际信息):
<datasource> <name>SchoolDB</name> <description>MySQL数据源,供学生数据服务使用</description> <jndiConfig> <name>jdbc/SchoolDB</name> </jndiConfig> <definition type="RDBMS"> <configuration> <url>jdbc:mysql://<目标数据库IP>:3306/school_db?useSSL=false&serverTimezone=UTC</url> <username>数据库用户名</username> <password>数据库密码</password> <driverClassName>com.mysql.cj.jdbc.Driver</driverClassName> <maxActive>50</maxActive> <maxWait>60000</maxWait> <testOnBorrow>true</testOnBorrow> <validationQuery>SELECT 1</validationQuery> <validationInterval>30000</validationInterval> </configuration> </definition> </datasource>
注:若使用旧版MySQL驱动,可保留
com.mysql.jdbc.Driver,但推荐使用新版的com.mysql.cj.jdbc.Driver。
2. 修改数据服务,引用外部数据源
将原数据服务中的静态<config>块替换为JNDI数据源引用,其余查询和资源配置保持不变:
<data name="RESTDataService" serviceNamespace="http://ws.wso2.org/dataservice/samples/json_sample" transports="http https"> <description>Exposing the data service as a REST service.</description> <!-- 替换原静态数据库配置为JNDI引用 --> <config id="default"> <property name="jndi_name">jdbc/SchoolDB</property> </config> <!-- 以下查询和资源配置完全保留原样 --> <query id="ReadStudents" useConfig="default"> <sql>SELECT id, name, school, grade FROM students</sql> <result outputType="json"> { "students":{ "student":[ { "name":"$name", "school":"$school", "grade":"$grade" } ] } } </result> </query> <!-- 其余CreateStudents、UpdateStudents、DeleteStudent查询及REST资源配置省略,保持原代码不变 --> </data>
3. 部署与验证
- 将修改后的数据服务重新打包为CAR文件,部署到WSO2 EI服务器
- 首次添加数据源后,重启EI服务器使配置生效
- 调用REST接口测试,确认数据库连接正常
环境迁移注意事项
- 迁移到新生产服务器时,仅需修改
master-datasources.xml中的<url>字段,替换为目标数据库的IP/主机名 - 确保目标EI服务器的
<EI_HOME>/repository/components/lib目录下存在MySQL驱动包(mysql-connector-java-*.jar)
内容的提问来源于stack exchange,提问作者Armando Rojas Valdez
相关产品推荐
相关产品推荐

