面向服務的架構(SOA)好處自然不必多說,把原來一個龐大的應用中不同的功能單元,拆分成一個一個的微服務,並通過Rpc調用(如 dubbo 或者RESTful)。 達到「高內聚,低耦合」的效果。
Spring Boot設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。用spring boot來快速搭建一個微服務是十分方便的(相比於傳統的spring框架)
最近整理的Java架構學習視頻和大廠項目底層知識點,需要的同學歡迎私信我【資料】發給你~一起學習進步!
Spring Boot的例子很多,這裡簡單用Spring+Mybatis來介紹。用一句話來介紹Spring Boot的好處是使用配置文件來簡化編碼,這裡的編碼不僅僅值代碼,還包括各種xml文件。
<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: 8181spring: datasource: url: jdbc:mysql://10.160.247.90:9306/realname username: realname password: realname driverClassName: com.mysql.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSourcemybatis: 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文件,就不再贅述)
@SpringBootApplicationpublic class Boot { public static void main(String[] args) { new SpringApplicationBuilder().build().run(Boot.class, args);}
現在反過來看看第二步,其實Spring boot已經幫我們生產了DataSource,Mybatis也通過配置文件幫生成了SqlSessionFactory等類。其實反過來看以前的代碼,是不是其實很多配置信息都是直接copy過來,稍微修改一下就可以用了。spring boot就是把關鍵的部分由我們自己通過配置文件來配置,根據這些關鍵配置信息就可以自動注入相關的Bean。
<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格式返回。
可以看出,我們的配置類型有傳統的JSON,PROPERTIES,YAMLl 還有自定義的類型,如 LIST
例如我們有一個ip白名單,key的名字為ip_config(如上圖)
@Componentpublic class IpFilter implements Filter { @RefreshValue(propertyName = &34;) 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
這裡也是秉承了Spring boot的歷練,使用配置文件來來配置配置刷新功能(有點繞口),而不用編寫具體代碼。
dubbo在國內是一個比較流行的Rpc框架。如何快速搭建一個dubbo服務呢
名字有點唬人,其實是我自己寫的。。
<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是dubbo中比較常見的擴展,如果要實現一個dubbo filter還是比較麻煩的,但是有在這裡使用我們的jar以後就很簡單了,直接繼承一個類就可以了
@Componentpublic class ProviderFilter extends AbstractDubboProviderFilterSupport { public Result invoke(Invoker<?> invoker, Invocation invocation) { System.out.println(&34;); return invoker.invoke(invocation); }}
可以看出,就算是同時使用了上面3種情況,其實也是不需要編寫一行代碼,只需要簡單的配置即可。
來源:網易工程師-李周
有任何問題歡迎留言交流~
整理總結不易,如果覺得這篇文章有意思的話,歡迎轉發、收藏,給我一些鼓勵~
有想看的內容或者建議,敬請留言!
最近利用空餘時間整理了一些精選Java架構學習視頻和大廠項目底層知識點,需要的同學歡迎私信我發給你~一起學習進步!有任何問題也歡迎交流~
Java日記本,每日存檔超實用的技術乾貨學習筆記,每天陪你前進一點點~