mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
add a special prefix into ha-datasource properties file
In order to put HA Datasource properties and other properties altogether into one properties file, HighAvailableDataSource add a new field named propertyPrefix.
This commit is contained in:
@@ -44,8 +44,12 @@ public class DataSourceCreator {
|
||||
private List<String> nameList = new ArrayList<String>();
|
||||
|
||||
public DataSourceCreator(String file) {
|
||||
this(file, "");
|
||||
}
|
||||
|
||||
public DataSourceCreator(String file, String propertyPrefix) {
|
||||
loadProperties(file);
|
||||
loadNameList();
|
||||
loadNameList(propertyPrefix);
|
||||
}
|
||||
|
||||
public Map<String, DataSource> createMap(HighAvailableDataSource haDataSource) throws SQLException {
|
||||
@@ -119,10 +123,14 @@ public class DataSourceCreator {
|
||||
return dataSource;
|
||||
}
|
||||
|
||||
private void loadNameList() {
|
||||
private void loadNameList(String propertyPrefix) {
|
||||
Set<String> names = new HashSet<String>();
|
||||
for (String n : properties.stringPropertyNames()) {
|
||||
if (n.contains(".url")) {
|
||||
if (propertyPrefix != null && !propertyPrefix.isEmpty()
|
||||
&& !n.startsWith(propertyPrefix)) {
|
||||
continue;
|
||||
}
|
||||
if (n.endsWith(".url")) {
|
||||
names.add(n.split("\\.url")[0]);
|
||||
}
|
||||
}
|
||||
@@ -167,4 +175,8 @@ public class DataSourceCreator {
|
||||
LOG.warn("File " + file + " can't be loaded!");
|
||||
}
|
||||
}
|
||||
|
||||
public List<String> getNameList() {
|
||||
return nameList;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,6 +88,7 @@ public class HighAvailableDataSource extends WrapperAdapter implements DataSourc
|
||||
private Map<String, DataSource> dataSourceMap = new ConcurrentHashMap<String, DataSource>();
|
||||
private DataSourceSelector selector = new RandomDataSourceSelector(this);
|
||||
private String dataSourceFile = DEFAULT_DATA_SOURCE_FILE;
|
||||
private String propertyPrefix = "";
|
||||
|
||||
private boolean inited = false;
|
||||
|
||||
@@ -100,7 +101,7 @@ public class HighAvailableDataSource extends WrapperAdapter implements DataSourc
|
||||
return;
|
||||
}
|
||||
if (dataSourceMap == null || dataSourceMap.isEmpty()) {
|
||||
dataSourceMap = new DataSourceCreator(dataSourceFile).createMap(this);
|
||||
dataSourceMap = new DataSourceCreator(dataSourceFile, propertyPrefix).createMap(this);
|
||||
}
|
||||
if (selector == null) {
|
||||
selector = new RandomDataSourceSelector(this);
|
||||
@@ -146,6 +147,14 @@ public class HighAvailableDataSource extends WrapperAdapter implements DataSourc
|
||||
this.dataSourceFile = dataSourceFile;
|
||||
}
|
||||
|
||||
public String getPropertyPrefix() {
|
||||
return propertyPrefix;
|
||||
}
|
||||
|
||||
public void setPropertyPrefix(String propertyPrefix) {
|
||||
this.propertyPrefix = propertyPrefix;
|
||||
}
|
||||
|
||||
public void setDataSourceMap(Map<String, DataSource> dataSourceMap) {
|
||||
if (dataSourceMap != null) {
|
||||
this.dataSourceMap = dataSourceMap;
|
||||
|
||||
@@ -3,11 +3,29 @@ package com.alibaba.druid.pool.ha;
|
||||
import org.junit.Test;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class DataSourceCreatorTest {
|
||||
@Test
|
||||
public void testNameList() {
|
||||
String file = "/com/alibaba/druid/pool/ha/ha-with-prefix-datasource.properties";
|
||||
DataSourceCreator creator = new DataSourceCreator(file, "prefix1");
|
||||
List<String> list = creator.getNameList();
|
||||
assertFalse(list.isEmpty());
|
||||
assertEquals(1, list.size());
|
||||
assertEquals("prefix1.foo", list.get(0));
|
||||
|
||||
creator = new DataSourceCreator(file);
|
||||
list = creator.getNameList();
|
||||
assertEquals(3, list.size());
|
||||
for (String k : list) {
|
||||
assertNotEquals("bar", k);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createMap() throws Exception {
|
||||
HighAvailableDataSource highAvailableDataSource = new HighAvailableDataSource();
|
||||
@@ -19,4 +37,21 @@ public class DataSourceCreatorTest {
|
||||
assertNotNull(map.get("bar"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createMapWithPrefix() throws Exception {
|
||||
HighAvailableDataSource highAvailableDataSource = new HighAvailableDataSource();
|
||||
String file = "/com/alibaba/druid/pool/ha/ha-with-prefix-datasource.properties";
|
||||
DataSourceCreator creator = new DataSourceCreator(file, "prefix1");
|
||||
Map<String, DataSource> map = creator.createMap(highAvailableDataSource);
|
||||
assertEquals(1, map.size());
|
||||
assertNotNull(map.get("prefix1.foo"));
|
||||
assertNull(map.get("prefix2.foo"));
|
||||
|
||||
creator = new DataSourceCreator(file, "prefix2");
|
||||
map = creator.createMap(highAvailableDataSource);
|
||||
assertEquals(1, map.size());
|
||||
assertNull(map.get("prefix1.foo"));
|
||||
assertNotNull(map.get("prefix2.foo"));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
prefix1.foo.url=jdbc:derby:memory:foo1;create=true
|
||||
prefix2.foo.url=jdbc:derby:memory:foo2;create=true
|
||||
foo.url=jdbc:derby:memory:foo3;create=true
|
||||
bar=jdbc:derby:memory:bar;create=true
|
||||
Reference in New Issue
Block a user