springboot+dubbo+mybatisplus+redis搭建

1,632 阅读2分钟

项目结构:

项目结构

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
  • 结尾: 基础功能就差不多就这些了,如生产用可以加入负载,调用链等配置