Skip to content

Commit ac3f148

Browse files
author
xiaoxiake
committed
feat: support springboot3
1 parent 3bcd613 commit ac3f148

File tree

11 files changed

+131
-22
lines changed

11 files changed

+131
-22
lines changed

pom.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
<groupId>com.baomidou</groupId>
1414
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
15-
<version>3.5.2</version>
15+
<version>3.6.0.RC1</version>
1616
<packaging>jar</packaging>
1717

1818
<name>dynamic-datasource-spring-boot-starter</name>
@@ -86,6 +86,12 @@
8686
<version>${mybatis.plus.version}</version>
8787
<optional>true</optional>
8888
</dependency>
89+
<dependency>
90+
<groupId>jakarta.servlet</groupId>
91+
<artifactId>jakarta.servlet-api</artifactId>
92+
<version>5.0.0</version>
93+
<optional>true</optional>
94+
</dependency>
8995
<dependency>
9096
<groupId>com.zaxxer</groupId>
9197
<artifactId>HikariCP-java7</artifactId>

src/main/java/com/baomidou/dynamic/datasource/processor/DsHeaderProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,4 @@ public String doDetermineDatasource(MethodInvocation invocation, String key) {
4242
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
4343
return request.getHeader(key.substring(8));
4444
}
45-
}
45+
}

src/main/java/com/baomidou/dynamic/datasource/processor/DsSessionProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,4 @@ public String doDetermineDatasource(MethodInvocation invocation, String key) {
4242
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
4343
return request.getSession().getAttribute(key.substring(9)).toString();
4444
}
45-
}
45+
}

src/main/java/com/baomidou/dynamic/datasource/processor/DsSpelExpressionProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,4 +101,4 @@ public static class ExpressionRootObject {
101101

102102
private final Object target;
103103
}
104-
}
104+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* Copyright © 2018 organization baomidou
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.baomidou.dynamic.datasource.processor.jakarta;
17+
18+
import com.baomidou.dynamic.datasource.processor.DsProcessor;
19+
import jakarta.servlet.http.HttpServletRequest;
20+
import org.aopalliance.intercept.MethodInvocation;
21+
import org.springframework.web.context.request.RequestContextHolder;
22+
import org.springframework.web.context.request.ServletRequestAttributes;
23+
24+
/**
25+
* @author TaoYu
26+
* @since 3.6.0
27+
*/
28+
public class DsJakartaHeaderProcessor extends DsProcessor {
29+
30+
/**
31+
* header prefix
32+
*/
33+
private static final String HEADER_PREFIX = "#header";
34+
35+
@Override
36+
public boolean matches(String key) {
37+
return key.startsWith(HEADER_PREFIX);
38+
}
39+
40+
@Override
41+
public String doDetermineDatasource(MethodInvocation invocation, String key) {
42+
HttpServletRequest request = (HttpServletRequest) ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
43+
return request.getHeader(key.substring(8));
44+
}
45+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* Copyright © 2018 organization baomidou
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.baomidou.dynamic.datasource.processor.jakarta;
17+
18+
import com.baomidou.dynamic.datasource.processor.DsProcessor;
19+
import jakarta.servlet.http.HttpServletRequest;
20+
import org.aopalliance.intercept.MethodInvocation;
21+
import org.springframework.web.context.request.RequestContextHolder;
22+
import org.springframework.web.context.request.ServletRequestAttributes;
23+
24+
25+
/**
26+
* @author TaoYu
27+
* @since 3.6.0
28+
*/
29+
public class DsJakartaSessionProcessor extends DsProcessor {
30+
31+
/**
32+
* session开头
33+
*/
34+
private static final String SESSION_PREFIX = "#session";
35+
36+
@Override
37+
public boolean matches(String key) {
38+
return key.startsWith(SESSION_PREFIX);
39+
}
40+
41+
@Override
42+
public String doDetermineDatasource(MethodInvocation invocation, String key) {
43+
HttpServletRequest request = (HttpServletRequest) ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
44+
return request.getSession().getAttribute(key.substring(9)).toString();
45+
}
46+
}

src/main/java/com/baomidou/dynamic/datasource/spring/boot/autoconfigure/DynamicDataSourceAutoConfiguration.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import com.baomidou.dynamic.datasource.processor.DsProcessor;
2828
import com.baomidou.dynamic.datasource.processor.DsSessionProcessor;
2929
import com.baomidou.dynamic.datasource.processor.DsSpelExpressionProcessor;
30+
import com.baomidou.dynamic.datasource.processor.jakarta.DsJakartaHeaderProcessor;
31+
import com.baomidou.dynamic.datasource.processor.jakarta.DsJakartaSessionProcessor;
3032
import com.baomidou.dynamic.datasource.provider.DynamicDataSourceProvider;
3133
import com.baomidou.dynamic.datasource.provider.YmlDynamicDataSourceProvider;
3234
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.druid.DruidDynamicDataSourceConfiguration;
@@ -37,6 +39,7 @@
3739
import org.springframework.beans.factory.InitializingBean;
3840
import org.springframework.beans.factory.ObjectProvider;
3941
import org.springframework.beans.factory.config.BeanDefinition;
42+
import org.springframework.boot.SpringBootVersion;
4043
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
4144
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
4245
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -127,8 +130,16 @@ public DataSourceInitEvent dataSourceInitEvent() {
127130
@Bean
128131
@ConditionalOnMissingBean
129132
public DsProcessor dsProcessor(BeanFactory beanFactory) {
130-
DsHeaderProcessor headerProcessor = new DsHeaderProcessor();
131-
DsSessionProcessor sessionProcessor = new DsSessionProcessor();
133+
String version = SpringBootVersion.getVersion();
134+
DsProcessor headerProcessor;
135+
DsProcessor sessionProcessor;
136+
if (version.startsWith("3")) {
137+
headerProcessor = new DsJakartaHeaderProcessor();
138+
sessionProcessor = new DsJakartaSessionProcessor();
139+
} else {
140+
headerProcessor = new DsHeaderProcessor();
141+
sessionProcessor = new DsSessionProcessor();
142+
}
132143
DsSpelExpressionProcessor spelExpressionProcessor = new DsSpelExpressionProcessor();
133144
spelExpressionProcessor.setBeanResolver(new BeanFactoryResolver(beanFactory));
134145
headerProcessor.setNextProcessor(sessionProcessor);
@@ -145,4 +156,4 @@ public void afterPropertiesSet() {
145156
}
146157
}
147158

148-
}
159+
}

src/main/java/com/baomidou/dynamic/datasource/spring/boot/autoconfigure/druid/DruidLogConfigUtil.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public static LogFilter initFilter(Class<? extends LogFilter> clazz, Map<String,
4949
Method method = METHODS.get(key);
5050
if (method != null) {
5151
try {
52-
method.invoke(filter, DsConfigUtil.convertValue(method,item.getValue()));
52+
method.invoke(filter, DsConfigUtil.convertValue(method, item.getValue()));
5353
} catch (Exception e) {
5454
log.warn("druid {} set param {} error", clazz.getName(), key, e);
5555
}
@@ -62,4 +62,4 @@ public static LogFilter initFilter(Class<? extends LogFilter> clazz, Map<String,
6262
return null;
6363
}
6464
}
65-
}
65+
}

src/main/java/com/baomidou/dynamic/datasource/spring/boot/autoconfigure/druid/DruidStatConfigUtil.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public static StatFilter toStatFilter(Map<String, Object> c, Map<String, Object>
5555
Method method = METHODS.get(key);
5656
if (method != null) {
5757
try {
58-
method.invoke(filter, DsConfigUtil.convertValue(method,item.getValue()));
58+
method.invoke(filter, DsConfigUtil.convertValue(method, item.getValue()));
5959
} catch (Exception e) {
6060
log.warn("druid stat set param {} error", key, e);
6161
}
@@ -65,4 +65,4 @@ public static StatFilter toStatFilter(Map<String, Object> c, Map<String, Object>
6565
}
6666
return filter;
6767
}
68-
}
68+
}

src/main/java/com/baomidou/dynamic/datasource/spring/boot/autoconfigure/druid/DruidWallConfigUtil.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public static WallConfig toWallConfig(Map<String, Object> c, Map<String, Object>
5252
Method method = METHODS.get(key);
5353
if (method != null) {
5454
try {
55-
method.invoke(wallConfig, DsConfigUtil.convertValue(method,item.getValue()));
55+
method.invoke(wallConfig, DsConfigUtil.convertValue(method, item.getValue()));
5656
} catch (Exception e) {
5757
log.warn("druid wall set param {} error", key, e);
5858
}
@@ -62,4 +62,4 @@ public static WallConfig toWallConfig(Map<String, Object> c, Map<String, Object>
6262
}
6363
return wallConfig;
6464
}
65-
}
65+
}

0 commit comments

Comments
 (0)