Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
guns-vip
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
chenjunxiong
guns-vip
Commits
41a20811
Commit
41a20811
authored
Aug 16, 2017
by
stylefeng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
整合进来多数据源
parent
5c9855fc
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
182 additions
and
0 deletions
+182
-0
guns-core/pom.xml
+5
-0
guns-core/src/main/java/com/stylefeng/guns/core/mutidatasource/DataSourceContextHolder.java
+35
-0
guns-core/src/main/java/com/stylefeng/guns/core/mutidatasource/DynamicDataSource.java
+18
-0
guns-core/src/main/java/com/stylefeng/guns/core/mutidatasource/annotion/DataSource.java
+18
-0
guns-core/src/main/java/com/stylefeng/guns/core/mutidatasource/aop/MultiSourceExAop.java
+81
-0
guns-core/src/main/java/com/stylefeng/guns/core/mutidatasource/config/MutiDataSourceProperties.java
+25
-0
No files found.
guns-core/pom.xml
View file @
41a20811
...
...
@@ -40,5 +40,10 @@
<artifactId>
commons-lang3
</artifactId>
<scope>
provided
</scope>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-jdbc
</artifactId>
<scope>
provided
</scope>
</dependency>
</dependencies>
</project>
guns-core/src/main/java/com/stylefeng/guns/core/mutidatasource/DataSourceContextHolder.java
0 → 100644
View file @
41a20811
package
com
.
stylefeng
.
guns
.
core
.
mutidatasource
;
/**
* datasource的上下文
*
* @author fengshuonan
* @date 2017年3月5日 上午9:10:58
*/
public
class
DataSourceContextHolder
{
private
static
final
ThreadLocal
<
String
>
contextHolder
=
new
ThreadLocal
<
String
>();
/**
* 设置数据源类型
*
* @param dataSourceType 数据库类型
*/
public
static
void
setDataSourceType
(
String
dataSourceType
)
{
contextHolder
.
set
(
dataSourceType
);
}
/**
* 获取数据源类型
*/
public
static
String
getDataSourceType
()
{
return
contextHolder
.
get
();
}
/**
* 清除数据源类型
*/
public
static
void
clearDataSourceType
()
{
contextHolder
.
remove
();
}
}
guns-core/src/main/java/com/stylefeng/guns/core/mutidatasource/DynamicDataSource.java
0 → 100644
View file @
41a20811
package
com
.
stylefeng
.
guns
.
core
.
mutidatasource
;
import
org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource
;
/**
* 动态数据源
*
* @author fengshuonan
* @date 2017年3月5日 上午9:11:49
*/
public
class
DynamicDataSource
extends
AbstractRoutingDataSource
{
@Override
protected
Object
determineCurrentLookupKey
()
{
return
DataSourceContextHolder
.
getDataSourceType
();
}
}
guns-core/src/main/java/com/stylefeng/guns/core/mutidatasource/annotion/DataSource.java
0 → 100644
View file @
41a20811
package
com
.
stylefeng
.
guns
.
core
.
mutidatasource
.
annotion
;
import
java.lang.annotation.*
;
/**
*
* 多数据源标识
*
* @author fengshuonan
* @date 2017年3月5日 上午9:44:24
*/
@Inherited
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Target
({
ElementType
.
METHOD
})
public
@interface
DataSource
{
String
name
()
default
""
;
}
guns-core/src/main/java/com/stylefeng/guns/core/mutidatasource/aop/MultiSourceExAop.java
0 → 100644
View file @
41a20811
package
com
.
stylefeng
.
guns
.
core
.
mutidatasource
.
aop
;
import
com.stylefeng.guns.core.mutidatasource.DataSourceContextHolder
;
import
com.stylefeng.guns.core.mutidatasource.annotion.DataSource
;
import
com.stylefeng.guns.core.mutidatasource.config.MutiDataSourceProperties
;
import
org.aspectj.lang.ProceedingJoinPoint
;
import
org.aspectj.lang.Signature
;
import
org.aspectj.lang.annotation.Around
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Pointcut
;
import
org.aspectj.lang.reflect.MethodSignature
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.core.Ordered
;
import
org.springframework.stereotype.Component
;
import
java.lang.reflect.Method
;
/**
* 多数据源切换的aop
*
* @author fengshuonan
* @date 2017年3月5日 上午10:22:16
*/
@Aspect
@Component
@ConditionalOnProperty
(
prefix
=
"guns"
,
name
=
"muti-datasource-open"
,
havingValue
=
"true"
)
public
class
MultiSourceExAop
implements
Ordered
{
private
Logger
log
=
LoggerFactory
.
getLogger
(
this
.
getClass
());
@Autowired
MutiDataSourceProperties
mutiDataSourceProperties
;
@Pointcut
(
value
=
"@annotation(com.stylefeng.guns.core.mutidatasource.annotion.DataSource)"
)
private
void
cut
()
{
}
@Around
(
"cut()"
)
public
Object
around
(
ProceedingJoinPoint
point
)
throws
Throwable
{
Signature
signature
=
point
.
getSignature
();
MethodSignature
methodSignature
=
null
;
if
(!(
signature
instanceof
MethodSignature
))
{
throw
new
IllegalArgumentException
(
"该注解只能用于方法"
);
}
methodSignature
=
(
MethodSignature
)
signature
;
Object
target
=
point
.
getTarget
();
Method
currentMethod
=
target
.
getClass
().
getMethod
(
methodSignature
.
getName
(),
methodSignature
.
getParameterTypes
());
DataSource
datasource
=
currentMethod
.
getAnnotation
(
DataSource
.
class
);
if
(
datasource
!=
null
)
{
DataSourceContextHolder
.
setDataSourceType
(
datasource
.
name
());
log
.
debug
(
"设置数据源为:"
+
datasource
.
name
());
}
else
{
DataSourceContextHolder
.
setDataSourceType
(
mutiDataSourceProperties
.
getDefaultDataSourceName
());
log
.
debug
(
"设置数据源为:dataSourceCurrent"
);
}
try
{
return
point
.
proceed
();
}
finally
{
log
.
debug
(
"清空数据源信息!"
);
DataSourceContextHolder
.
clearDataSourceType
();
}
}
/**
* aop的顺序要早于spring的事务
*/
@Override
public
int
getOrder
()
{
return
1
;
}
}
guns-core/src/main/java/com/stylefeng/guns/core/mutidatasource/config/MutiDataSourceProperties.java
0 → 100644
View file @
41a20811
package
com
.
stylefeng
.
guns
.
core
.
mutidatasource
.
config
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.stereotype.Component
;
/**
* 默认多数据源配置
*
* @author fengshuonan
* @date 2017-08-16 10:02
*/
@Component
@ConfigurationProperties
(
prefix
=
"guns.muti-datasource"
)
public
class
MutiDataSourceProperties
{
private
String
defaultDataSourceName
=
"dataSourceGuns"
;
public
String
getDefaultDataSourceName
()
{
return
defaultDataSourceName
;
}
public
void
setDefaultDataSourceName
(
String
defaultDataSourceName
)
{
this
.
defaultDataSourceName
=
defaultDataSourceName
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment