idea1

此生再无相见时 提交于 2020-03-04 04:21:21

1、下载eclipse 或 idea
Eclipse:http://www.eclipse.org/downloads/eclipse-packages/
选择windows 64bit
点击download
download from是China再下载 不是就选 select another mirror
选择China-university of science and technology of China
idea:下载如下
https://www.jianshu.com/p/7d60ea5e51e9
2、下载JDK
oracle:https://www.oracle.com/java/technologies/javase-jdk8-downloads.html
Windows x64 如果太慢了 移步百度网盘
3、下载maven
PS:maven版本太高可能会让IDEA构建maven报错
比如unable import maven project
改了maven版本3.3.6可以 3.6+的就不行了
查看maven版本 cmd mvn -version 换了低版本要改环境变量MAVEN_HOME的路径
设置一下maven
maven home directory (安装目录)
user settings file(也就是conf下的settings.xml) 这个把mirror换成ali的地址

<mirror>  
    <id>alimaven</id>  
    <mirrorOf>central</mirrorOf>  
    <name>aliyun maven</name>  
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
</mirror>

local repository (conf下的settings.xml 里面的<localRepository>写一个路径</localRepository> 这个路径就是local repository的路径)
设置环境变量
构建maven的downloading plugins第一次构建的话 可能会慢一点
4、下载tomcat 解压到当前文件夹(IDEA不需要配tomcat)
运行startup.bat (在解压目录的bin下start)
5、eclipse配置tomcat
配置tomcat 注意tomcat的server location 要选第二个 use tomcat installation 否则在eclipse里启动tomcat的localhost会是404
配置maven 的settings.xml要复制一份放在m2文件夹下 user setting 的目录就是m2下的settings.xml 然后 全局setting的目录就是安装目录(应该也可以用conf的setting idea用的conf eclipse 用的m2) 由于生成maven的时候 请求外网资源 太慢 会修改 settings.xml的镜像地址 然后要给maven建立一个 仓库 地址也放在settings.xml
★IDEA的使用
一、springboot
环境要求
cmd java -version
java 8/9
maven 3.2+
springboot网址:https://docs.spring.io/spring-boot/docs/2.0.6.RELEASE/reference/htmlsingle
二、创建maven
在IDEA新建maven文件
spring-boot-starter:springboot启动器 需要什么场景就依赖什么启动器
在这里插入图片描述
在这里插入图片描述
@SpringBootApplication 标识一个引导类 说明是一个springboot项目
@Configuration 属于spring中的一个注解 定义配置类 等价于配置文件
@Component 添加到spring容器中 表示一个组件
@AutoConfigurationPackage 将引导类所在包及其子包下面的所有组件添加到spring容器
@Import({AutoConfigurationImportSelector.class})
将所有组件以圈类名方式返回 并添加到spring容器中 会给容器中导入非常多的自动配置类(xxxxxAutoConfiguration)
@ComponentScan 被该注解标识的类 会被spring容器进行管理
在这里插入图片描述
点圈起来的箭头运行 不需要配置tomcat 然后localhost:8080/hello
如果要打jar包运行
在pol.xml添加
在这里插入图片描述

maven projects>lifecycle>package>run maven build
然后在控制台找到它打包的路径 building jar: 路径
然后copy一下这个路径的找到jar包 把它放在桌面上
cd desktop>java -jar 包名
然后就可以localhost:8080/hello
当你在pol.xml引入一个新的文件时 右下角会提醒你import changes 点击import changes 才可以正常使用 也可以设置为自动import changes 在提醒你 import的框选择 Enable Auto-Import 取消自动 import(file>setting>maven>importing 把 import maven project automaticlly 取消掉)
三、创建springboot
file>new>module>spring lnitializr
next 然后加一个spring web 结束 (如果plugins和dependencies 报错 pom.xml 报 failed to read artifact descriptor for xxxx 如果maven设置没问题 那再创建一次吧 可能是网速没跟上) 创建完成后 删除 .mvn .gitignore mvnw mvnw.cmd
springboot 默认不支持 jsp文件 使用模板引擎构建页面
新建文件 在需要添加的文件上左键 new>java class 新建结构如果是 controller.InitController 就会新建成一个controller文件夹 然后在controller的文件夹下生成一个InitController.java
controller文件夹要和引导类Application在同一个文件夹下 不然是扫不到InitController.java文件的 也就是localhost:8080/info不存在
在这里插入图片描述
四、sprinfboot配置文件(application.properties/application.yml)
在这里插入图片描述
application.properties全局配置文件 可以修改springboot的默认值
server.port=xxxx更改端口号
new>file application.yml和application.properties相同效果 语法不一样
ymal可以做配置文件 但不是一个标记语言 xml是标记语言 ymal以数据为中心 在配置数据的时候具有面向对象的特征 比json xml等更适合做配置文件

//做配置文件 xml
<server>
    <port>8088</port>
</server>
//ymal做配置文件 写法key: value
//行内写法 server: [port: 8080,contextPath: /info]
//列表写法 用 - 区分
server:
  port: 8088
  contextPath: /info

ymal语法:key: value(:后面必须有空格) 同级元素前面的空格要一样
字符串默认不用加引号 如果加双引号会变成转义字符 单引号的时候会当成普通字符串输出

五、application.properties和application.yml的注入(@ConfigurationProperties & @Value)

ymal注入文件
如果构建的springboot里面只有application.properties没有yml文件 就在resources下新建一个application.yml
里面可以设定你需要注入的数据 按照ymal的语法 按空格来分块

//application.yml
example:
  lastName: xiaohua
  age: 20
  birthday: 1990/10/10
  map:
    key1: value1
    key2: value2
  list:
    - one
    - two
    - three
//application.properties
example.last-name=xiaohua
example.age=30
example.birthday=1990/10/10
example.boss=false
example.salary=23000
example.map.key1=value1
example.map.key2=value2
example.list=one, two, three

在src下 在放有xxxxApplication的文件夹下新建bean.Example 把application.yml出现过的属性全部声明
@ConfigurationProperties 告诉springboot将配置文件中对应属性的值 映射到这个组件中 一一绑定
prefix = " " 配置文件中的前缀名 那个前缀与厦门的属性一一映射
@Component 必须将当前组件作为springboot中的一个组件才能使用容器提供的@ConfigurationProperties功能

@PropertySource(value = {"classpath:example.properties"})
//@Validated 数据校验
@Component
@ConfigurationProperties(prefix = "example")
public class Example {
//@Email 校验是否符合email地址的规则 当然lastname是不符合的
    private String lastName;
    private Integer age;
    private Date birthday;

    private Map map;
    private List list;

   //配置文件配置完成后 在idea中通过alt+insert的to String自动生成
    @Override
    public String toString() {
        return "Example{" +
                "lastName='" + lastName + '\'' +
                ", age=" + age +
                ", birthday=" + birthday +
                ", map=" + map +
                ", list=" + list +
                '}';
    }
//配置文件配置完成后 在idea中通过alt+insert的getter and setter自动生成
    public String getLastName() {
        return lastName;
    }
}

使用@value注入数据

//也可以使用@value注入数据 类似于spring里面的数据注入 spring的数据注入方式
//value可以是 #{表达式} ${key} 字面量
<bean>
    <property name="lastName" value="${key}"></property>
</bean>
//使用@Value
//@ConfigurationpRorerties 批量导入数据 @Value要一个一个写
@Value("${example.last-name}")//配置文件的写法
//@ConfigurationProperties可以支持lastName last-name last_name的写法
private String lastName;
@Value("#{3*2}")
private Integer age;

如果提示 springboot configurationan… processor … 去pol.xml加一个 spring-boot-configuration-processor 的依赖 类似的都可以参考
★解决ymal注入无法运行 在springconfigApplicatonTest中run的public void contextLoads() { System.out.println(example); } 方法时 一直在build文件 界面提示resolving maven dependencies…但是这个resolving一直停不下来
在这里插入图片描述
自动创建的springboot的pol.xml如果有下面注掉的部分可能会导致 test的xxxxApplicationTest.java 里面的import org.junit.runner.RunWith; @RunWith(SpringRunner.class)报错 可以尝试把pol.xml以下配置注掉 没有@RunWith 应该是引入的junit有问题 可以正常引用的语句import org.junit.Test; import org.junit.runner.RunWith;
在这里插入图片描述

@ConfigurationProperties @Value
数据注入 批量注入配置文件的属性值 一个一个绑定
松散语法 支持 不支持
SpEL(表达式) 不支持 支持
复杂类型封装 支持 不支持(map/list)
JSR303数据校验(@Validated) 支持 不支持

如果不需要导入全部数据的时候 建议用@Value来获取值

然后可以在test里面的ApplicationTests里做一下测试

@RunWith(SpringRunner,class)
@SpringBootTest
class xxxxApplicationTests{
    @Autowired
    Example example;
    @Test
    public void contextLoads(){
        System.out.println(example);
    }
}

此时控制台会输出application.yml里面的example的内容

如果要在页面中显示配置的值 新建controller/ExampleController

@Controller
public class ExampleController{
    @Value("{example.last-name}")
    private String name;
    @ResponseBody
    @RequestMapping("/say")
    public String sayHello(){
        return name;
    }
}

在Application运行
IDEA中文乱码 file>settings>editor>file encodings
在这里插入图片描述
六、配置文件的加载
1、加载指定配置文件@PropertySource
@ConfigurationProperties默认从全局配置文件application.properties/application.yml中获取值 所有配置文件写在全局配置文件中是不合理的 可以将他们抽取出来 放到其他局部配置文件中
resources>new>file>emp.properties在里面写入需要的配置
然后在bean/Emp中添加@PropertySource(value = {"classpath:emp.properties"})
2、加载xml文件@ImportResource
新建service.EmpService

public class EmpService {
    public void add(){
        System.out.println("add...");
    }
}

在resources新建一个xml文件

<beans>
    <bean id="empService" class="com.example.springboot.EmpService"></bean>
</beans>

把配置好的xml文件加到主配置类上 就是在xxxxApplication 里加入@ImportResource(locations = {"classpath:spring.xml"})
看service这个组件是否可以拿到这个xml
在ApplicationTests中进行测试 拿到它的应用上下文

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringconfigApplicationTests{

    @Autowired
    Example example;

    @Autowired
    Application context;

    @Test
    public void testXml(){
         EmpService empService = (EmpService) context.getBean("empService");
         //EmpService empService = context.getBean("empService"); alt+enter进行强类型转换
         System.out.println(empService);//com.example.springconfig.service.EmpService@5136207f
         empService.add();
    }
    
    @Test
    public void contextLoads() {
        System.out.println(emp);
    }

}

3、自定义配置类向容器注入组件@Configuration
新建config.EmpConfig
@Configuration 它是spring里的注解 用于标识当前类是一个配置类 来表示对应spring配置文件

@Configuration
public class EmpConfig{
    @Bean//用于向容器中注入组件
    public EmpService empService2(){
        System.out.println("EmpService注入成功")return new EmpService();
    }
}

ApplicationTests

@Test
    public void testXml() {
        EmpService empService2 = (EmpService)context.getBean("empService2");
        System.out.println("empService2: " + empService2);
    }

在Application把//@ImportResource(locations = {"classpath:spring.xml"})注掉
七、如何选定不同的环境(默认 生产 开发)
Profile 是spring用来针对不同的环境要求 提供不同的配置支持 全局 profile 配置使用的文件名可以是application-(profile).properties或者application-(profile).yml
1、文件配置(推荐)
application-dev.properties生产环境
application-prod.properties开发环境
application.properties默认配置
如果你没有指定使用开发环境或者生产环境会使用默认的配置 可以在全局配置中设定配置文件spring.profiles.active=dev/prod
如果是ymal文件 写在一个文档中就可以 properties需要三个

//application.yml
server:
  port: 8080
spring:
  profiles:
    active:pord
---
server:
  port: 8088
spring:
  profiles: dev

----
server:
  port: 8081
spring:
  profiles:prod

2、命令行指定配置环境
edit configurtions>选择对应的项目>configuration>environment>program arguments里面填写--spring.properties.active=prod/dev
3、通过jar包
打开maven project>选择对应的项目>lifecycle>package>run maven build然后通过命令行来确定环境 进入包所在的文件夹下 java -jar 包名 --spring.properties.active=prod
八、配置文件的位置 后加载的文件会覆盖先加载的
root/config/application.properties>root/application.properties>resources/config/application.properties>resources/application.properties
如果创建的是project下的module会导致文件路径是project的路径 在edit configuration>项目名>environment>working directory中写$MODULE_DIR$
打印路径System.out.println(System.getProperty("user.dir"))
配置文件的属性参照
https://docs.spring.io/spring-boot/docs/2.0.6.RELEASE/reference/htmlsingle/#common-application-pro
perties
九、springboot日志
1、日志抽象层+日志实现 springboot采用 slf4j(日志抽象层)+logback(日志实现) 的组合
在springboot的依赖文件中查看(spring-boot-starter-web>spring-boot-starter>spring-boot-starter-logging)logback-classic log4j-to-slf4j jul-to-slf4j
springboot默认配置好了日志 只要启动springboot项目控制台就会输出日志信息
logback的配置 在external libraries>Maven:org.springfranmework.boot:spring-boot:2.0.6.RELEASE>spring-boot-2.0.6.RELEASE.jar>org>springframework>boot>logging>logback>(base.xml defaults.xml file.appender.cml等) LoggingSystemProperties.class日志配置类 也可以自定义配置(customization) logback.xml / logback-spring.xml
2、日志级别error(错误)>warn(警告)>info(自定义)>debug(调试)>trace(运行)
testLoggerFactory.getLogger(getClass()); 点alt+enter (introduce local variable引入局部变量)Logger logger = LoggerFactory.getLogger(getClass());
springboot默认info级别日志 在运行时我们可以看到控制台的日志都是INFO
可以在applica.properties中修改logging.level.com.xxx=debug将会打印debug info warn error 但不是所有的日志级别都会改成debug logging.level.root=debug 这时会输出很多debug信息 也就是修改了springboot的默认级别 不过在上线之后就不需要放在较低级别了

@RunWith(SpringRunner.class)
@SpringBootTest
public class ProfileApplicationTests{
    Logger logger = LoggerFactory.getLogger(getClass());
    @Test
    public void contextLoads{
        //logger.trace/debug/info/warn/error
    }
}

3、日志输出位置的设置
日志默认在控制台输出 可以在applica.properties通过logining.file=springboot.log(springboot.log生成在根目录下 也可以指定一个存储路径 C:/xxx/…/文件名.log)或logging.path=spring/boot设置输出位置
logging.path生成在所在磁盘根目录spring/boot/spring.log两者都会在每一次运行之后追加日志信息 如果同时设置了logging.file和logging.path只有logging.file会生效logging.path中将不会生成日志信息
4、日志输出格式的设置
application.properties中
修改控制台输出格式logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} %msg%n日期+thread线程名+(左对齐5个字符宽度)级别+类名+信息+换行
修改日志文件输出格式logging.pattern.file=
5、切换日志框架
加入依赖spring-boot-starter-log4j2 和 加入文件
https://docs.spring.io/spring-boot/docs/2.0.6.RELEAES/reference/htmlsingle/#using-boot-start

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!