IDEA入门与springboot第一个项目

IDEA新手入门:

1、汉化idea

    如果需要汉化idea,那么下载汉化jar包之后,需要将jar包中的某几个文件删除,否则idea的设置或其他的有可能打不开。就算删除了那几个文件之后,配置tomcat的时候还是配置不了,因此建议还是使用英文版。


2、创建springmvc非mvn项目

    配置完tomcat之后,创建一个javaweb项目(非mvn项目),直接新建一个Web Application即可,然后在tomcat中配置他的artifacts,其中配置这个项目在tomcat中的访问路径URL:http://localhost:8081/OneWebTest/index.jsp,其中OneWebTest是访问的项目,index.jsp是首页文件,然后再在Deployment中设置这个应用的访问Application context一般设置为 / 就行了。如果Deploy at the servicer startup中没有这个项目的artifacts则按+号添加。


3、创建一个mvn的javaweb项目

    地址:https://blog.csdn.net/czc9309/article/details/80304074
    直接创建一个mvn的项目,完成之后为其添加tomcat运行环境,然后与上面一样,不过有不同之处是:添加的artifacts是 ***:war这一个,另一个***:war exploded可以不添加,另外Application context:需要设置成 /*** 即可。
    遇见的问题:
        1)、当配置已经准备完成后,运行项目,发现接口调用出现404,最终问题出在xml上,不是里面的配置的问题,二十web.xml虽然是引用的classpath*:...xml,但是如果xml不放在资源文件夹下(需要将这个文件右击选择 “Mark Directory as” 然后选择资源文件),那么引用是不会成功,因此springmvc的xml文件没有被引用,导致里面扫描注解失败,最终导致接口调用不成功出现404。
        2)、返回中文乱码问题:如果直接返回一个字符串(如:“123我是谁”),并且返回的设置是:"application/json;charset=UTF-8",那么返回的则是中文乱码,但是如果返回的设置是"html/text;charset=UTF-8"那么返回的中文则不是乱码。
        3)、跨域问题暂时还未遇到,如果遇到就使用csdn中记录的操作
        4)、这个mvn项目的结构则是:src/main/java(source源码包,并不是文件夹)/controller(package),src/main/resouce(资源包resources),src/main/webapp(web的目录结构),pom.xml,这几种结构;spring和springmvc的配置文件:spring的配置文件不用操作,springmvc的配置文件添加两行即可:①<mvc:annotation-driven />(开启注释)②<context:component-scan base-package="comController" />(扫描注解);接着即可在前端编写ajax访问后台添加的接口即可。这便是一个最小最小的springmvc项目结构。

4、创建简单的springboot项目并打包成jar部署到服务器运行

    依赖框架的选择:web、jpa(jpa默认使用hibernate作为orm实现,一般使用jpa会使用hibernate)
    构建项目之后,运行项目出现:o.s.b.d.LoggingFailureAnalysisReporter 错误,在@SpringBootApplication后面添加(exclude = {DataSourceAutoConfiguration.class})则不会报错(这是因为初始项目没有添加数据源,所以这里在注解中添加一下)。在项目中添加接口接口类(添加的这些类,必须和启动类在一个目录里面(或者在这个目录里面的文件夹中),否则就找不到),然后在浏览器输入localhost:8080/***则可访问接口。
    说明:jpa的优势:
        1)任何声明符合jpa标准的框架都遵循同样的架构,提供相同访问的api,这样保证了基于jpa开发的企业应用经过少量的修改,就能够在不同的jpa框架下运行。
        2)容器级特性的支持:支持大数据集、事务、并发等容器级事务。
        3)简单方便:简单的编程模型,jpa框架和接口也非常简单,没有太多的规则和设计模式的要求。jpa基于非侵入式原则设计 ,很容易和其他框架或容器集成。
        4)查询能力:jpa查询是面向对象而非面向数据库的,操作对象是实体,而非关系型数据库,而且能够支持批量更新和修改、join等只有sql才能够提供的高级查询特性。
        5)高级特性:能够支持面向对象的高级特性,如类之间的集成,多态和类之间的复杂关系。(这一点暂时不理解)
    1、pom中添加mysql的依赖,创建application.yml或者直接使用application.properties,在yml中配置数据源,配置jpa自动生成表。如下所示
        spring:
          datasource:
            driver-class-name: com.mysql.jdbc.Driver
            url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
            username: root
            password: 12345678
          jpa:
            hibernate:
              ddl-auto: update
            show-sql: true
            database: mysql
    2、创建实体与dao、service、controller
        1)给实体注释@Entity和表名@Table(name = "表名称")
        2)id字段,注释@Id和自增@GeneratedValue(strategy = GenerationType.IDENTITY)
        3)创建dao、dao需要实现JpaRepository这个接口,就可以直接定义接口实现sql操作了
        4)创建controller和service实现接口
        5)运行项目
        6)项目运行报错
            1、数据源问题:可以去掉上面添加的数据源了,另外mysql的驱动也需要将 com.mysql.jdbc.Driver 换成 com.mysql.cj.jdbc.Driver,因为前面的已经被弃用。
            2、mysql时区错误问题:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone:因此直接在数据库运行:set global time_zone = '+8:00' 即可。
    3、将springboot项目使用maven打包成jar文件,部署到Linux上运行
        1)在右侧Maven中的Lifecycle,点击clean,等待执行完成,然后点击package打包,等待执行完成后,在target中就会生成.jar文件
        2)然后将jar文件发布到服务器上
        3)执行 nohup java -jar springboottest-0.0.1-SNAPSHOT.jar >> log.out 2>&1 & 命令,使此jar文件在服务器后台执行
        nohup说明:
            nohup是不挂断的运行命令。
            语法:nohup Command [Arg..] [&]
            描述:nohup命令运行由Command参数和任何相关的Arg参数指定的命令,忽略所有挂断信号。在注销后使用nohup命令运行后台中的程序。要运行后台中的nohup命令,添加 & (表示“and”符号)到命令的尾部。
            操作系统中有三个常用的流:
            0:标准输入流 stdin
            1:标准输出流 stdout
            2:标准错误流 stderr
            一般我们用 > console.txt,实际是 1 > console.txt的省略用法;< console.txt,实际是 0 < console.txt的省略用法;
            2>&1的意思:这个意思是把标准错误(2)重定向到标准输出中(1),而标准输出又导入到文件log.out中里面了。至于为什么需要将标准错误重定向到标准输出的原因,那就归结为标准错误没有缓冲区,而stdout有。
            最后谈一下/dev/null文件的作用,这是一个无底洞,任何东西都可以定向到这里,但是却无法打开。所以一般很大的stdou和stderr当你不关心的时候可以利用stdout和stderr定向到这里>./command.sh >/dev/null 2>&1
            >>:是在文件后面追加
            >:是覆盖

猜你喜欢

转载自blog.csdn.net/qq_37978623/article/details/90023473