cn.coder.jdbc.SqlSessionFactory Maven / Gradle / Ivy
package cn.coder.jdbc;
import java.util.HashMap;
import java.util.Properties;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import cn.coder.jdbc.core.DataSourceConfig;
import cn.coder.jdbc.core.JdbcDataSource;
import cn.coder.jdbc.session.DefaultSqlSession;
import cn.coder.jdbc.session.ProxySession;
import cn.coder.jdbc.util.Assert;
import cn.coder.jdbc.util.ObjectUtils;
public final class SqlSessionFactory {
private static final Logger logger = LoggerFactory.getLogger(SqlSessionFactory.class);
public static final String DEFAULT_SOURCE = "default";
private static final HashMap sourceMap = new HashMap<>();
private final DataSource dataSource;
private SqlSession session;
public SqlSessionFactory(DataSource ds) {
this.dataSource = ds;
}
public static SqlSessionFactory getInnerFactory() {
return getInnerFactory(DEFAULT_SOURCE);
}
public static SqlSessionFactory getInnerFactory(String source) {
DataSource dataSource = sourceMap.get(source);
return new SqlSessionFactory(dataSource);
}
public SqlSession cachedSession() {
if (session == null)
session = newSession();
return session;
}
public SqlSession newSession() {
Assert.notNull(this.dataSource, "Property 'dataSource' is required");
return ProxySession.bind(new DefaultSqlSession(this.dataSource));
}
public static void createSessions() {
Properties p = ObjectUtils.loadProperties("jdbc.properties");
Assert.notNull(p, "The jdbc.properties file not found");
String[] sources = (DEFAULT_SOURCE + "," + p.getProperty("jdbc.all", "")).split(",");
DataSourceConfig config;
for (String source : sources) {
config = new DataSourceConfig(source, p);
sourceMap.put(source, new JdbcDataSource(config));
}
}
public synchronized static void destory() {
long start = System.nanoTime();
for (DataSource source : sourceMap.values()) {
if (source instanceof JdbcDataSource)
((JdbcDataSource) source).close();
}
sourceMap.clear();
if (logger.isDebugEnabled())
logger.debug("Sessions destroied: {}ns", (System.nanoTime() - start));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy