前引
前人说过要对新技术保持好奇。对于游戏开发来讲,前端表现几年会有大的技术革新,还记得flash红火时,刚毕业就敢要入万的月薪。现在过气了,3d开始流行,h5也要占半边天。
反而服务端,就算你拿着五年前的技术,也不大会被市场淘汰,游戏业务还是很窄的 窄的原因,我想是业务需求太小,有多少游戏会出生,能有多少上线,又有几款成大作。
刚开始还可能要好好干,好好优化,结果一款款开发的游戏,还没上线都挂了。心凉了。技术架构根本没来及在线上验证,在上线前都是完美的,牛B的,自大了
很少有一款产品,大作,并且还能持久性的前进。技术能有保持同步的迭代,进化的环境很少
spring boot是什么
微服务现在很火,有什么技术大会,这是必说的话题。spring boot作为微服务新一代实现技术,也就少不了大师们的推广。
war时代的结束
这是最近听到让我耳目一新的话。
太好了,最讨厌了war了,最不想写web了
原以为boot是个很新的东西,看了下介绍原来还是spring,只是更方便的使用spring
spring boot没有引入任何形式的代码生成,而是利用spring 4的条件化配置特性,以及Maven和Gradle提供的传送依赖解析,以此实现spring应用程序上下文里的自动配置 从本质上来说,spring boot就是spring,它做了那些没有它你自己也会去做的spring bean配置
原来自己开发一个spring工程 ,你得去拷贝一份application.xml模块,来修改配置一下,而现在不需要你自己动手去处理这个模块xml了。
现在技术发展都是向自动化,智能化发展。
原来ant时代,也一样去搞一份模板配置,修修改改。后面推出maven,不要再去处理模板配置了。
项目中引入spring boot的原因
- 可以直接jar运行,这其实是最主要的原因。
游戏项目是需要提供一些api给平台方的,这些api是由一些外围项目提供,如gate,charge项目,这些项目只要提供restfull web api,难免不用到web project
项目是基于maven的,我希望分很多模块去完成一个项目,而不是要分很多的project。因为很多基础代码公用,(千万别建议拷贝jar包这种远古时代才有的方式),当然可以install到代码库里,但游戏项目都是小型项目,没有很多团队一起协同,就几个人,随时都可能会去补充公用类,分模块是最适合的。如果gate,charge就是一个模块多好 - 与时代同步
游戏后端技术,如果不外面走走,几年不更新,一样能胜任。
就像有些网站一样,直接servlet也能胜任,多年不技术更新也一样能迎合市场需求
有时感觉是为了技术而技术,但我们总是要走出去的,不能跟这个时代脱节,不能说struts,spring mvc最底层还是包装servlet,就不去了解,学习。
项目改造
原来的gate是用servlet做的,鉴于以上的原因现在改成boot
找一个简单的boot demo运行一下,感受一个boot的神奇。
pom里面加上依赖
org.springframework.boot spring-boot-starter-parent 1.4.3.RELEASE /> org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test
再加上一个controller
@RestController public class UserController { @RequestMapping(value = "/users/{username}",method = RequestMethod.GET) public String getUser(@PathVariable String username, @RequestParam String pwd){ return "Welcome,"+username; } }
一个入口类
@Configuration @EnableAutoConfiguration public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
Run App,就可以通过http://localhost:8080/users/jackchu 访问了
完整代码:https://github.com/zhuxingsheng/springbootdemo
就是这么神奇,简单的不能再简单了。就这样,一个web项目就行了。不再需要以前的xml,properties配置,不再需要运行一个web容器
老的servlet项目,只需要在入口类上加个@ServletComponentScan注解,就能识别以前写的servlet,太不可想象。
程序员未来也要失业了,受不了这技术进步的速度。
虽然很方便,但对于被虐待惯的,不被虐待真是不习惯。以前写了很多的配置,再都不要了,还真是找不到方向,怎么使用现在简便的方式处理业务需求。
怎么把原来spring的xml bean配置改成boot方式?
@Configuration @ImportResource(locations={"classpath:application-xxx.xml"}) public class Config { }
这样就引入了自定义的xml配置。
spring boot推荐使用thymeleaf模板引擎,又有新的技能要学习;
这个世界永远不变的就是变化,人人都知道的真理,但真变化了,有时真的头疼
很多公司不升级技术,反正都能满足业务需求,以不变应万变。
Thymeleaf是一个XML/XHTML/HTML5模板引擎,它的语法要求比html严格些,以前写的html都有各样的问题
Element type “myelement” must be followed by either attribute specifications, “>” or "/> onload="load()" Uncaught ReferenceError: load is not defined
JS中有些特殊字符需要转义时,直接用
- 简单方便快捷。
1. language="javascript" th:inline="javascript"> 2. // 3. 4. //]]> 5.
结束
现在已经把老项目改完成了。
有惊喜也有深坑,现在的技术真是越来越简捷,这背后的原理我想是约定优于配置
你需要遵循约定,才能如鱼得水;要学习的也就是技术的约定,顺势而为,剑人合一