项目结构:
pom引用
- springboot
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
- dubbo:
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
- mybatis-plus
<!-- mybatis -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
- redis
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置文件
- dubbo 配置 application.yml
dubbo:
scan:
base-packages: com.<name>.finance.ccas.api.facade
protocol:
port: 37881
name: dubbo
id: dubbo
application:
name: ccas
registry:
protocol: zookeeper
address: 127.0.0.1:2181
id: zk1
- redis配置:
spring:
redis:
host: 127.0.0.1
port: 6379
password: password
database: 10
jedis:
pool:
max-active: 100
max-idle: 100
max-wait: 3000s
min-idle: 10
- druid配置:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/ccas?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&serverTimezone=GMT%2B8
type: com.alibaba.druid.pool.DruidDataSource
druid:
max-active: 20
min-idle: 3
initial-size: 1
max-evictable-idle-time-millis: 3000000
min-evictable-idle-time-millis: 300000
max-wait: 60000
time-between-eviction-runs-millis: 60000
validation-query: SELECT 'x'
test-on-borrow: false
test-on-return: false
test-while-idle: true
username: username
password: IgkRM1rHCtAPvTt8XpTRly824YwCg1H2b/ApU5pisnhDf9Ypr0/sDiz9ZYBPahsQe+sxJn2hmicivNP8P8cyGw==
pool-prepared-statements: true
filters: config
public_key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJn1UW1CCv6ZTUHyAQ/qQTqLYERgD+kypBzDk1cYSavoJX5h/1hBmELGqloj9eRUjG3HG8dDlSx/y4P7ZXy2E8cCAwEAAQ==
- durid 配置<公钥解密>:
- class DruidDataSourceWrapper
- class DruidDataSourceAutoConfigure
@Configuration
@ConfigurationProperties("spring.datasource.druid")
class DruidDataSourceWrapper extends DruidDataSource implements InitializingBean {
@Autowired
private DataSourceProperties basicProperties;
@Value("${spring.datasource.druid.public_key}")
private String publicKey;
@Override
public void afterPropertiesSet() throws Exception {
//if not found prefix 'spring.datasource.druid' jdbc properties ,'spring.datasource' prefix jdbc properties will be used.
if (super.getUsername() == null) {
super.setUsername(basicProperties.determineUsername());
}
if (super.getPassword() == null) {
super.setPassword(basicProperties.determinePassword());
}else {
super.setPassword(ConfigTools.decrypt(publicKey, super.getPassword()));
}
if (super.getUrl() == null) {
super.setUrl(basicProperties.determineUrl());
}
if (super.getDriverClassName() == null) {
super.setDriverClassName(basicProperties.getDriverClassName());
}
}
@Autowired(required = false)
public void autoAddFilters(List<Filter> filters) {
super.filters.addAll(filters);
}
/**
* Ignore the 'maxEvictableIdleTimeMillis < minEvictableIdleTimeMillis' validate,
* it will be validated again in {@link DruidDataSource#init()}.
* <p>
* for fix issue #3084, #2763
*
* @since 1.1.14
*/
@Override
public void setMaxEvictableIdleTimeMillis(long maxEvictableIdleTimeMillis) {
try {
super.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis);
} catch (IllegalArgumentException ignore) {
super.maxEvictableIdleTimeMillis = maxEvictableIdleTimeMillis;
}
}
@Configuration
@ConditionalOnClass(DruidDataSource.class)
@AutoConfigureBefore(DataSourceAutoConfiguration.class)
@EnableConfigurationProperties({DruidStatProperties.class, DataSourceProperties.class})
@Import({DruidSpringAopConfiguration.class})
public class DruidDataSourceAutoConfigure {
@Bean(initMethod = "init")
@ConditionalOnMissingBean
public DataSource dataSource() {
return new DruidDataSourceWrapper();
}
}
- mybatis-plus配置:
mybatis-plus:
global-config:
db-config:
id-type: auto
configuration:
auto-mapping-unknown-column-behavior: warning
mapper-locations: classpath*:mapper/*.xml
type-aliases-package: com.<name>.finance.ccas.source.entity
- dubbo 使用样例:
如需指定服务互调取: 加入属性 [url:"dubbo://ip:port"]
-
dubbo 生产端
- 在实现类上加入 @service注解 注意引入包为:com.alibaba.dubbo.config.annotation
-
结尾: 基础功能就差不多就这些了,如生产用可以加入负载,调用链等配置