Birt报表利用毗连池设置
现阶段我们在开拓报表的时候,是利用jdbc链接数据库的,为提高报表的运行效率和不变性,利用毗连池举办打点。较量轻便和低耦合的办理步伐,利用jndi毗连池。
jdbc和jndi的区别
JDBC -最根基的毗连数据库的方法, 每次对数据库打交道的时候 ,毗连数据库是需要实例下你实现毗连数据库的要领可能类。
JNDI DataSource 英文全称是:Java Naming and Directory Interface java 命明接口,当处事启动时 事先把毗连数据库的已经连许多几何条,详细几多条你可以配置,存放在tomcat容器里,用的时候可以直接利用, 不消再实例化获得毗连, 相对与jdbc效率要快点
在eclipse设计报表的时候,我们利用jdbc链接数据库做测试,当到了tomcat运行情况中切换到jndi毗连池,这是较量利便的开拓要领。
实现步调:
1.tomcat设置jndi毗连池
在 {tomcat目次}\webapps\{项目名}\META-INF 中新增context.xml文件,设置代码如下
<resource-ref>
<description>Database Source</description>
<res-ref-name>jdbc/travel_agency</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
3.实例报表中数据源代码
1 <data-sources>
2 <oda-data-source extensionID="org.eclipse.birt.report.data.oda.jdbc" name="数据源" id="227">
3 <property name="odaDriverClass">com.mysql.jdbc.Driver</property>
4 <property name="odaURL">jdbc:mysql://192.168.1.100/travel_agency</property>
5 <property name="odaUser">itravel</property>
6 <encrypted-property name="odaPassword" encryptionID="base64">NzA5Mzk0</encrypted-property>
7 <property name="odaJndiName">java:comp/env/jdbc/travel_agency</property>
8 </oda-data-source>
9 </data-sources>
除了第7行 <property name="odaJndiName">java:comp/env/jdbc/travel_agency</property>,其余是我们的之前的设置。用了第7行的代码,暗示该报表支持jndi数据源,birt在运行报表的时候,会先用jndi去毗连,假如失败了再用jdbc链接,这样做的长处就是,我们在开拓报表的时候,没有放到web情况中,可以利用jdbc,当放到tomcat中,因为有了第7行的设置。默认回收jdni毗连。
4.步调3中第6行暗码的生成措施(JAVA措施)
package com.hollycrm.birt.security;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import sun.misc.BASE64Encoder;
public class CreateBirtBase64Password {
public static void main(String[] args) {
InputStreamReader inStreamReader = new InputStreamReader(System.in);
BufferedReader buffReader = new BufferedReader(inStreamReader);
System.out.println("请输入需要通过Base64加密的字符串:");
String strSrcPassword = null;
try {
strSrcPassword = buffReader.readLine();
if (strSrcPassword != null) {
// 通过用户输入的暗码信息生成Base64的加密暗码
String strBase64Password = new BASE64Encoder().encode(strSrcPassword.trim().getBytes());
System.out.println("您输入的原始暗码为:" + strSrcPassword + "\r对应生成的Base64暗码值为:" + strBase64Password);
}
} catch (IOException e) {
e.printStackTrace();
}
}