快捷搜索:  汽车  科技

spring框架和mybatis等持久化框架(实战如何用SpringMybatis快速搭建1个微服务)

spring框架和mybatis等持久化框架(实战如何用SpringMybatis快速搭建1个微服务)例如我们有一个ip白名单,key的名字为ip_config(如上图)可以看出,我们的配置类型有传统的JSON PROPERTIES YAMLl 还有自定义的类型,如 LIST <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>1.5.3.RELEASE</version> </dependency> <dependency>

概述

面向服务的架构(SOA)好处自然不必多说,把原来一个庞大的应用中不同的功能单元,拆分成一个一个的微服务,并通过Rpc调用(如 dubbo 或者RESTful)。 达到“高内聚,低耦合”的效果。

Spring Boot设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。用spring boot来快速搭建一个微服务是十分方便的(相比于传统的spring框架)

最近整理的Java架构学习视频和大厂项目底层知识点,需要的同学欢迎私信我【资料】发给你~一起学习进步!

Spring boot

Spring Boot的例子很多,这里简单用Spring Mybatis来介绍。用一句话来介绍Spring Boot的好处是使用配置文件来简化编码,这里的编码不仅仅值代码,还包括各种xml文件。

第一步 pom依赖
  • 这里使用的spring boot的版本为.5.3.RELEASE
  • mybatis-spring-boot-starter 是Mybatis提供的,所以为什么名字不是叫spring-boot-mybatis-starter(题外话)

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>1.5.3.RELEASE</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.28</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.41</version> </dependency> </dependencies> 第二步 配置文件

server: port: 8181 spring: datasource: url: jdbc:mysql://10.160.247.90:9306/realname username: realname password: realname driverClassName: com.mysql.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource mybatis: mapperLocations: classpath:mapper/*.xml type-handlers-package: com.netease.urs.realname.dao type-aliases-package: com.netease.urs.realname.entity configuration: map-underscore-to-camel-case: true 第三步 启动应用

是的,经过以上配置就可以启动一个Spring Boot的应用。(Mybatis有jar包可以直接生产Mapper类和xml文件,就不再赘述)

@SpringBootApplication public class Boot { public static void main(String[] args) { new SpringApplicationBuilder().build().run(Boot.class args); }

现在反过来看看第二步,其实Spring boot已经帮我们生产了DataSource,Mybatis也通过配置文件帮生成了SqlSessionFactory等类。其实反过来看以前的代码,是不是其实很多配置信息都是直接copy过来,稍微修改一下就可以用了。spring boot就是把关键的部分由我们自己通过配置文件来配置,根据这些关键配置信息就可以自动注入相关的Bean。

接入urs服务台配置刷新第一步: pom依赖

<dependency> <groupId>com.netease.urs</groupId> <artifactId>urs-mg-property-spring-boot</artifactId> <version>1.1.9-SNAPSHOT</version> </dependency> 第二步:在服务台管理配置信息

Urs服务台的功能很简单,就是根据不同的应用,管理一组key-value对。然后提供一个url,就把同一个应用下的key-value用json格式返回。

spring框架和mybatis等持久化框架(实战如何用SpringMybatis快速搭建1个微服务)(1)


可以看出,我们的配置类型有传统的JSON PROPERTIES YAMLl 还有自定义的类型,如 LIST

第三步:使用注解注入

例如我们有一个ip白名单,key的名字为ip_config(如上图)

@Component public class IpFilter implements Filter { @RefreshValue(propertyName = "ip_config") private List<String> ipConfigs; ...

ps:注解注入只是更新配置信息的一种方式,如果有更定制化需求,还可以通过实现一个接口,通过编写代码来更新。

第四步: 配置文件

urs: property: refresh-token: abcdefg refresh-url: http://xxx.xxx.xxx.xxx/api/getConfigs.json?path=urs-mg/spring-boot-quick-start listener-port: 8182 listener-path: /refresh

  • refresh-url :服务台提供的接口
  • refresh-token:调用服务台接口时需要token校验
  • listener-path, listener-port::监听刷新的url,端口。即当访问 本机的8182端口,并且url为/refresh的时候,就会从服务台拉取一次最新的配置信息,并且更新配置信息(例如我们在服务台上修改了ip_config的配置,刷新以后同时应用中的配置信息也会同步修改)
小节

这里也是秉承了Spring boot的历练,使用配置文件来来配置配置刷新功能(有点绕口),而不用编写具体代码。

快速启动dubbo服务

dubbo在国内是一个比较流行的Rpc框架。如何快速搭建一个dubbo服务呢

第一步:pom文件

名字有点唬人,其实是我自己写的。。

<dependency> <groupId>com.netease.urs</groupId> <artifactId>srping-boot-dubbo-starter</artifactId> <version>1.0.2-SNAPSHOT</version> </dependency> 第二步:配置文件

一个简单的dubbo 服务者的配置如下:

dubbo: application: name: provider registry: address: zookeeper://10.165.124.13:2182

当然其实还有很多进阶的配置,也是支持的。

第三步: 注解

使用Dubbo的com.alibaba.dubbo.config.annotation.Service 注解来注册服务提供者。已经完成了dubbo的服务的注册,剩下的就只用关心业务代码了

可选步骤: Filter

Filter是dubbo中比较常见的扩展,如果要实现一个dubbo filter还是比较麻烦的,但是有在这里使用我们的jar以后就很简单了,直接继承一个类就可以了

@Component public class ProviderFilter extends AbstractDubboProviderFilterSupport { public Result invoke(Invoker<?> invoker Invocation invocation) { System.out.println("ProviderFilter"); return invoker.invoke(invocation); } } 总结

可以看出,就算是同时使用了上面3种情况,其实也是不需要编写一行代码,只需要简单的配置即可。

来源:网易工程师-李周

有任何问题欢迎留言交流~


整理总结不易,如果觉得这篇文章有意思的话,欢迎转发、收藏,给我一些鼓励~

有想看的内容或者建议,敬请留言!

最近利用空余时间整理了一些精选Java架构学习视频和大厂项目底层知识点,需要的同学欢迎私信我发给你~一起学习进步!有任何问题也欢迎交流~

Java日记本,每日存档超实用的技术干货学习笔记,每天陪你前进一点点~

猜您喜欢: