前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot初探

springboot初探

作者头像
码农戏码
发布2021-03-23 11:18:25
3040
发布2021-03-23 11:18:25
举报
文章被收录于专栏:DDD

前引

前人说过要对新技术保持好奇。对于游戏开发来讲,前端表现几年会有大的技术革新,还记得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的原因

  1. 可以直接jar运行,这其实是最主要的原因。 游戏项目是需要提供一些api给平台方的,这些api是由一些外围项目提供,如gate,charge项目,这些项目只要提供restfull web api,难免不用到web project 项目是基于maven的,我希望分很多模块去完成一个项目,而不是要分很多的project。因为很多基础代码公用,(千万别建议拷贝jar包这种远古时代才有的方式),当然可以install到代码库里,但游戏项目都是小型项目,没有很多团队一起协同,就几个人,随时都可能会去补充公用类,分模块是最适合的。如果gate,charge就是一个模块多好
  2. 与时代同步 游戏后端技术,如果不外面走走,几年不更新,一样能胜任。 就像有些网站一样,直接servlet也能胜任,多年不技术更新也一样能迎合市场需求 有时感觉是为了技术而技术,但我们总是要走出去的,不能跟这个时代脱节,不能说struts,spring mvc最底层还是包装servlet,就不去了解,学习。

项目改造

原来的gate是用servlet做的,鉴于以上的原因现在改成boot

找一个简单的boot demo运行一下,感受一个boot的神奇。

pom里面加上依赖

代码语言:javascript
复制
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.3.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

再加上一个controller

代码语言:javascript
复制
@RestController
public class UserController {

    @RequestMapping(value = "/users/{username}",method = RequestMethod.GET)
    public String getUser(@PathVariable String username, @RequestParam String pwd){
        return "Welcome,"+username;
    }
}

一个入口类

代码语言:javascript
复制
@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方式?

代码语言:javascript
复制
@Configuration
@ImportResource(locations={"classpath:application-xxx.xml"})
public class Config {


}

这样就引入了自定义的xml配置。

spring boot推荐使用thymeleaf模板引擎,又有新的技能要学习;

这个世界永远不变的就是变化,人人都知道的真理,但真变化了,有时真的头疼

很多公司不升级技术,反正都能满足业务需求,以不变应万变。

Thymeleaf是一个XML/XHTML/HTML5模板引擎,它的语法要求比html严格些,以前写的html都有各样的问题

代码语言:javascript
复制
Element type “myelement” must be followed by either attribute specifications, “>” or "/>


onload="load()"
Uncaught ReferenceError: load is not defined

JS中有些特殊字符需要转义时,直接用

代码语言:javascript
复制
<script language="javascript" th:inline="javascript">
//<![CDATA[

//]]>
</script>

简单方便快捷。

结束

现在已经把老项目改完成了。

有惊喜也有深坑,现在的技术真是越来越简捷,这背后的原理我想是约定优于配置

你需要遵循约定,才能如鱼得水;要学习的也就是技术的约定,顺势而为,剑人合一

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农戏码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前引
  • spring boot是什么
  • 项目中引入spring boot的原因
  • 项目改造
  • 结束
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档