汪建军的博客

休迅飞凫,飘忽若神,凌波微步,罗袜生尘。

Android developer, sometimes thinking, sometimes try it.


如何用Spring MVC + JPA + Mysql + Tomcat + Nginx开发服务端

新入手的云主机,域名也刚备案通过,当然不单单为了搭建一个博客系统,更多的是想接触一下后台开发。在大湿兄的指点下动手写了一个简单的接口,运气不错,能跑起来,下面说下我是怎么做的。

关于SpringMVC、JPA


SpringMVC是由Spring演化出的摆脱了传统的SSH模式的web开发MVC框架。JPA是一种java的开发范式,它可以通过注解的形式极大的减少开发量(可以类比Android开发常见用的XUtils一些写法),它本身包含了Hibernate,不需要手写SQL语句。SpringMVC是一款轻量级的web框架,非常好上手,它倡导的ioc开发模式,加上JPA这种注解式开发,让代码变得特别简洁易懂,但是并不影响它完成复杂的工作。如这样一句

User user = userRepository.findUserByQq(qq);

你就能从数据库取一条数据(findUserByQq是一个接口而且不需要实现,只要你的命名符合它的要就就相当于一条sql语句)。建表只需要在实体类类名上加上

@Entity
@Table(name = "t_user")
public class User {...}

甚至还有分页这种高级的用法

Page<User> page = userRepository.findAll(new PageRequest(p,20));

一句话分页。

它内部是如何实现的,性能如何?对于个人开发者而言基本上无需考虑这些问题,当用户量达百万再考虑手动优化数据库吧。

工具

  • 开发工具 - Intellij IDEA (在官网下载最新版本)
  • 服务器 - Tomcat
  • 数据库 - Mysql
  • 本地连云主机工具 - Xshell
  • 本地传文件到云主机工具 - SSH Secure File Transfer

简单来说一句话:开发完在本地的tomcat上顺利跑起来后打包成war文件丢到云主机的tomcat的webapps目录下照样能跑。


配置Intellij IDEA

Intellij IDEA安装好后,新建一个工程
选择Spring Initializr,点next,接下来你会等待一会,原因是从上图中的那个网址更新库(也就是更新下下张图最上面那个Spring Boot Version:1.3.2) type选择gradle,packaging选择war,其他的随意,next。
用到什么勾选什么,作为一个最简单的例子,勾上JPAMySQL即可。next,随意命个名,finish。第一次创建工程,会从网上下载很久的各种库,随意感受一下: 下不动的可以配置一下代理搭梯子下载,下图是用ss作为梯子配置如下(翻不了的略过该步骤): 注意port numberproxy port保持一致,配置完后点击check connection,输入"http://google.com"提示绿色的successful即可。

新建好之后会看到如下图这样一个目录结构:

接下来重点来了!!

打开application.properties改成如下: 抱歉尝试了很久,markdown不支持上段为代码,贴出来排版会出错,只好截图了o(╯□╰)o,你可以手动输入,顺便加深理解。说明:
spring.datasource.usernamespring.datasource.password改成自己相应的数据库名和密码(等下再说如何配置MySQL)。
如果你有个云主机,将localhost改成自己主机的ip。
spring.jpa.database为自己的数据库名,我们使用MySQL就填MYSQL

Intellij IDEA上配置tomcat
两张图带过:


配置Tomcat

Apache官网上下载一个对应操作系统的8版本zip包,无需安装,解压到任意一个位置即可。云主机上也要下载(wget XXX)一个tomcat然后解压(uzip XXX)。 启动tomcat

  • Windows下:双击 ..你存tomcat的根目录\bin\startup.bat 文件
  • Linux打开:进入 ..你存tomcat的根目录\bin\ 输入命令

    sh startup.sh

打开浏览器,本地就输入http://localhost:8080/,主机上就输入你的ip:8080,会看到如下界面


说明一切正常,右上角三个白色按钮比较重要
  • Server Status 本机的一些状态信息,如占用了多少内存之类,进去无需密码。
  • Manager App 放到tomcat上的项目的管理界面,需要密码才能进去,进去后能看到你的项目(初始有一些他自带的项目,如examples,浏览器输入http://localhost:8080/examples/可以打开),你可以stop或reload它们。
  • Host Manager 本机管理界面,暂时用得不多,需要密码才能进去。

上面说了有两个需要密码才能进去,如下配置密码:
打开..你存tomcat的根目录\conf\tomcat-users.xml文件 自定义两组账号密码,添加下面两句就好了。保存-重启tomcat即可。


配置MySQL

Windows下安装MySQL随便搜一下有大量文章,不赘述。右键我的电脑-管理-服务里找到MySQL可以管理关闭开启,任务管理器里看到的mysqld.exe就mysql正在运行。

Linux下安装Mysql就更简单了,一句话:

apt-get install mysql-server

按提示操作等待一下就好了。

这里提几个比较关键的命令:

mysqladmin -u root password "[密码]" 这是新建密码

mysqladmin -u root -p password [密码] 这是修改密码

mysql -u root -p 之后输入密码 这是进入mysql

以上命令在windows下需要进入..你Mysql的安装目录\bin,空白处按住shift,再点鼠标右键,选择“在此处打开命令窗口”。当然你也可以将这个目录配置到环境变量,就可以在一般的cmd下输入了。

Mysql有个默认8小时超时机制,可以在进入mysql后输入如下命令查看:

show variables like '%timeout';

就是说8小时没有和你的mysql通信,就会关掉你的连接,这会导致你程序所有数据库相关操作出错(假定你用mysql作为后台数据库支持)。那么如何修复这个问题?

  1. 打开配置文件,位于根目录下,windows下名为my.ini,Linux下名为my.cnf
  2. 在[mysqld]节点下面加上两行

interactive_timeout=2592000

wait_timeout=2592000

表示设置超时为1个月,最高能设置到一年,但是你的程序一个月还和数据库没有任何交互操作,那也没什么好说的了...o(╯□╰)o

有些同学可能不太习惯命令行操作Mysql,而习惯于用Navicat Premium这款图形化工具来操作。用Navicat Premium连你的云主机的话可能会出现一个问题,就是你在远程非root用户连接报10038错误,这样解决


打包部署

假使你已经写好了一个后台程序(后面的博客会有个简单的例子),希望非本地也能调用到自己写的接口,需要将其打包部署到云主机的tomcat上。 在Intellij idea上打开Terminal(对,就是用Android Studio开发Android的同学经常使用的,能代替cmd的),输入

gradle war

最后出现BUILD SUCCESSFUL表示编译成功。

然后在工程的\build\lib\目录下会有一个.war文件

打开SSH Secure File Transfer,连上你的主机,之后如下图 将.war文件upload到云主机的tomcat目录\webapps\下,过会云主机会自动解压这个.war然后生成一个同名文件夹。


配置子域名

我用的是Dnspod做域名管理的,Dnspod是腾讯的,在防dns攻击上做得比较好。如何使用dnspod管理万网上购买的域名,官网上有详细教程,不赘述。弄好后,在你的域名上如下添加子域名: 主机记录就是你的子域名,命名随意,你喜欢就好,比如作为后台常见的是a或者api,作为手机端是m。


配置Nginx

你可能需要用到Nginx做反向代理,关于nginx的一些说明,我上一篇博客讲到的就不赘述了。在Nginx的sites-enabled下新建一个随意命名的文件,打开输入:

server {
    listen 80;

    # 设置子域名
    server_name a.你的域名;

    location / {
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   Host      $http_host;
            proxy_pass http://127.0.0.1:8080/firstapi/;
    }
}

保存重启Nginx

service nginx restart


结束

到这里就能使用你写好的后台了,祝你好运!^O^

转载出处:http://zzimoo.com/service/

最近的文章

一个简单而完整的后台开发实例

前阵子尝试了一下抓取所有金山词霸每日一句的数据,存到数据库,然后自己写接口放到云主机上调用,运气不错,一切顺利,下面说说我是怎么做的。 打开金山词霸某一天的每日一句,比如这个:http://news.…

后端继续阅读
更早的文章

我是如何搭建这个博客系统的

Yap!!! 花了两天时间,在大湿兄 钱进 的全力指导下终于搭建起了这个博客。服务器是用的阿里云,域名是在万网买的,用dnspod进行域名管理,目前域名正在备案中,这期间大湿兄给我弄了个他的…

举个例子, 杂技继续阅读
comments powered by Disqus