/** * */ package jframe.datasource.druid; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import jframe.core.plugin.PluginException; import jframe.core.plugin.annotation.InjectPlugin; import jframe.core.plugin.annotation.Injector; import jframe.core.plugin.annotation.Start; import jframe.core.plugin.annotation.Stop; import jframe.datasource.DataSourcePlugin; import jframe.datasource.DataSourceService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; import com.alibaba.druid.pool.DruidPooledConnection; /** * @author dzh * @date Oct 21, 2013 2:32:51 PM * @since 1.0 */ @Injector public class DruidServiceImpl implements DataSourceService { private static final Logger LOG = LoggerFactory .getLogger(DruidServiceImpl.class); public static final String DS_CONFIG = "file.datasource"; private DruidDataSource _dataSource; @InjectPlugin static DataSourcePlugin _plugin; @Start public void start() { try { initDataSource(_plugin.getConfig(DS_CONFIG)); } catch (Exception e) { LOG.error(e.getMessage()); } } @Stop public void stop() { if (_dataSource != null) _dataSource.close(); } /* * (non-Javadoc) * * @see datam.plugin.services.DataSourcePoolService#getConnection() */ @Override public Connection getConnection() throws SQLException { return _dataSource.getConnection(); } public void initDataSource(String path) throws PluginException { File dsFile = new File(path); if (!dsFile.exists()) { LOG.error("Not found datasource file {}", path); return; } Properties p = new Properties(); FileInputStream fis = null; try { fis = new FileInputStream(dsFile); p.load(fis); _dataSource = (DruidDataSource) DruidDataSourceFactory .createDataSource(p); _dataSource.init(); } catch (Exception e) { LOG.error(e.getMessage()); System.exit(-1); // 数据库初始化失败,程序直接退出 } finally { if (fis != null) { try { fis.close(); } catch (IOException e) { } } } } @Override public void recycleConnection(Connection conn) throws SQLException { ((DruidPooledConnection) conn).recycle(); } @Override public void closeConnection(Connection conn) throws SQLException { ((DruidPooledConnection) conn).close(); } @Override public DataSource getDataSource() { return _dataSource; } @Override public void closeService() { if (_dataSource != null) { _dataSource.close(); } LOG.info("DataSource is closed"); } }