说明:
这是工作的一个实际应用,在此作一下备案、东西不难但容易忘记。里面主要包括
1、XML配置信息加载
2、单例模式使用
3、ThreadLocal使用,不管在此意义不大
4、WebLogic数据源使用,获取不到数据源将使用JDBC连接
一、XML配置
<?xml version="1.0" encoding="UTF-8"?>
<config>
<!-- JDBC的配置信息 -->
<db-info>
<driver-name>oracle.jdbc.driver.OracleDriver</driver-name>
<url>jdbc:oracle:thin:@localhost:1521:orcl</url>
<user-name>name</user-name>
<password>password</password>
</db-info>
<!-- 数据源的配置信息 -->
<datasoure-info>
<initContextFactory>weblogic.jndi.WLInitialContextFactory</initContextFactory>
<provider-url>jdbc:oracle:thin:@localhost:1521:orcl</provider-url>
<jndi-name>jndiName</jndi-name>
</datasoure-info>
</config>
二、POJO用来存读到的配置属性
public class JdbcConfig {
// jdbc配置
private String driverName;
private String userName;
private String password;
private String url;
// weblogic数据源的配置
private String initContextFactory;
private String providerUrl;
private String jndiName;
public String getDriverName() {
return driverName;
}
public void setDriverName(String driverName) {
this.driverName = driverName;
}
................................................
}
三、单例加载配置文件
看到空间的另外一篇博客可以知道,这种单例很显然不是最佳的写法;而且dom4j的解析也有一点冗余哦,不过影响不大。
public class XmlConfigReader {
// 懒汉式(用的时候再创建),延迟加载
private static XmlConfigReader instance = null;
// 保存jdbc相关配置信息
private JdbcConfig jdbcConfig = new JdbcConfig();
// 构造方法让其private,这就不让外界利用new创建此类实例
private XmlConfigReader() {
SAXReader reader = new SAXReader();
// 从用来加载类的搜索路径打开具有指定名称的资源,以读取该资源。此方法通过系统类加载器
InputStream in = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("dbsource.xml");
try {
Document doc = reader.read(in);
// 取得jdbc相关配置信息
Element driverNameElt = (Element) doc
.selectObject("/config/db-info/driver-name");
Element urlElt = (Element) doc.selectObject("/config/db-info/url");
Element userNameElt = (Element) doc
.selectObject("/config/db-info/user-name");
Element passwordElt = (Element) doc
.selectObject("/config/db-info/password");
// 取得WebLogic数据源的相关信息
Element initContextFactory = (Element) doc
.selectObject("/config/datasoure-info/initContextFactory");
Element providerUrl = (Element) doc
.selectObject("/config/datasoure-info/provider-url");
Element jndiname = (Element) doc
.selectObject("/config/datasoure-info/jndi-name");
// jdbc取得相关的配置
jdbcConfig.setDriverName(driverNameElt.getStringValue());
jdbcConfig.setUserName(userNameElt.getStringValue());
jdbcConfig.setPassword(passwordElt.getStringValue());
jdbcConfig.setUrl(urlElt.getStringValue());
// 数据源取得相关的配置
jdbcConfig.setInitContextFactory(initContextFactory
.getStringValue());
jdbcConfig.setProviderUrl(providerUrl.getStringValue());
jdbcConfig.setJndiName(jndiname.getStringValue());
} catch (DocumentException e) {
e.printStackTrace();
}
}
// 静态方法访问时,直接访问不需要实例化
public static synchronized XmlConfigReader getInstance() {// synchronized表示同时只能一个线程进行实例化
if (instance == null) {// 如果两个进程同时进入时,同时创建很多实例,不符合单例
instance = new XmlConfigReader();
}
return instance;
}
public JdbcConfig getJdbcConfig() {
return jdbcConfig;
}
}
四、数据库的连接
public class Conn {
private static final ThreadLocal<Connection> connectLocal = new ThreadLocal<Connection>();
static JdbcConfig jdbcConfig = XmlConfigReader.getInstance()
.getJdbcConfig();
public static Connection getJDBCConnection() {
Connection conn = (Connection) connectLocal.get(); // 获得连接
try {
if (conn == null) { // 如果连接不存在,就创建一个新的连接
Class.forName(jdbcConfig.getDriverName().trim());
conn = DriverManager.getConnection(jdbcConfig.getUrl().trim(),
jdbcConfig.getUserName(), jdbcConfig.getPassword()
.trim());
connectLocal.set(conn); // 保存到ThreadLocal中
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static Connection getConnection() {
Connection conn = (Connection) connectLocal.get(); // 获得连接
Hashtable<String, String> ht = new Hashtable<String, String>();
ht.put(Context.INITIAL_CONTEXT_FACTORY, jdbcConfig
.getInitContextFactory().trim());
ht.put(Context.PROVIDER_URL, jdbcConfig.getProviderUrl().trim());
Context ctx = null;
try {
ctx = new InitialContext(ht);
DataSource ds = (DataSource) ctx.lookup(jdbcConfig.getJndiName()
.trim());
conn = ds.getConnection();
connectLocal.set(conn); // 保存到ThreadLocal中
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (ctx != null) {
ctx.close();
}
} catch (NamingException e) {
e.printStackTrace();
}
}
if (conn == null) {
conn = getJDBCConnection(); //JDBC连接
}
return conn;
}
public static void CloseConnection() { // 如果这样做,ThreadLocal的性能就不能得到体现了.
Connection conn = (Connection) connectLocal.get();
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace(); // 出现异常建议上抛,在最上层做提示处理.
} finally {
connectLocal.remove();
}
}
}
这里如何数据源里面获得的conn是null,将调用JDBC的连接。
分享到:
相关推荐
2. **Console mode**:控制台模式,提供了一个文本界面供用户输入参数,适用于需要自动化安装流程但又不想使用静默模式的情况。 3. **Silent mode**:静默模式,通过预先准备的响应文件进行无人值守安装,适用于批量...
4. **配置数据源**:若应用需要连接数据库,需在WebLogic中配置JDBC数据源,包括驱动类、URL、用户名和密码等信息。 5. **集群与负载均衡**:在企业级环境中,可能需要配置WebLogic集群以实现高可用性和负载均衡,...
为了便于管理,还需要创建一个用于存放WebLogic软件和数据的目录,并将所有权赋予新创建的`weblogic`用户: ```shell # 新建文件夹 #mkdir -p /var/bea # 为这个文件夹授权给新用户 #chown -R weblogic:weblogic /...
《经典Java EE企业应用实战:基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发》介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun公司提供的JSF RI;EJB 3部分则包含Session Bean、Message Driven Bean的...
最后,使用 `java -version` 和 `javac -version` 命令来测试 JDK 是否安装成功。 二、安装 Weblogic 首先,需要创建一个用户来安装 Weblogic,例如 `weblogic`。然后,下载相应版本的 Weblogic 安装包(通常为....
- 备份环境:包括域目录、应用程序和数据、自定义的安全提供程序、节点管理器目录和脚本。 - 确保每台机器上的配置文件一致。 - **升级路线图**: - 安装新版本的 WebLogic 软件(如 10.3.6),无需建立新域。 -...
2. 配置JMS模板和消息源,指定连接工厂和目的地。 3. 在Spring应用中注入MDP或消息监听容器,实现接收和发送消息的逻辑。 **测试用例:** 创建一个简单的Spring应用,模拟发送和接收JMS消息。发送方使用JMS模板发送...
在本文中,我们将深入探讨如何在AIX 5操作系统上安装WebLogic服务器,这是一个关键的任务,对于在IBM AIX环境中部署企业级Java应用程序至关重要。WebLogic是Oracle公司提供的一个Java应用服务器,它提供了管理和运行...
Some BEA products require multiple license keys for full functionality, or use a license key which is not intuitively identified as being for that product. Please refer to the legend below to ...
weblogic8.1版本_4 BEA WebLogic是用于开发、集成、部署和管理大型分布式Web应用、 网络应用和数据库应用的Java应用服务器。 这个版本很难找哦......
很多时候我们需要自己部署服务器。无论是tomcat,还是jboss都只能算是小型服务器。真正的企业级服务器为weblogic ,下面就是weblogic服务器安装文件。
weblogic集群详细的搭建步骤,绝对手把手的教你部署weblogic服务器以及集群的扩容.zip
weblogic启动日志详细说明介绍,报错了所有的初始化信息模块的介绍!
NULL 博文链接:https://vernonchen163.iteye.com/blog/1995514
帮助初学这在Eclipse中配置开发EJB的容器这里以weblogic的配置来说明
Weblogic的安装、配置与应用部署 Linux 下安装过程 Weblogic配置 应用部署 在 Linux 控制台启动 Weblogic