zoukankan      html  css  js  c++  java
  • Spring Boot

    http://blog.csdn.net/jsyxcjw/article/details/46763639


    spring boot

    1
    父Pom 包含用到的jar包的版本定义, java6, utf-8 等设定, 还有一个boot的打包成可执行jar的plugin, 智能读取配置文件 *application*.properties/yml/yaml

    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.8.RELEASE</version>
    </parent>


    2
    jar包版本定义在
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>1.5.8.RELEASE</version>
    <relativePath>../../spring-boot-dependencies</relativePath>
    </parent>

    mvn dependency:tree 可以打出工程中使用的jar包树结构


    3
    启动boot项目
    ・run as application
    ・mvn spring-boot:run
    ・java -jar target/myproject-0.0.1-SNAPSHOT.jar

    4
    改变java版本
    <properties>
    <java.version>1.8</java.version>
    </properties>


    5
    打包可执行jar需要导入plugin
    <build>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    </plugins>
    </build>


    6
    主程序类 要放在其他类的根目录上,这样可以正确扫描到其他配置定义

    @Configuration
    @EnableAutoConfiguration
    @ComponentScan


    @SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan


    7
    配置类 @Configuration
    可以写一个类中 也可以分开写
    导入其他的配置的写法
    ・@Import 导入配置类
    ・@ImportResource 导入配置XML

    @Configuration
    @Import(value={ConfigA.class})
    @ImportResource(locations={
    "classpath:/com/boraji/tutorial/spring/config/configB.xml"
    })
    public class ConfigC {
    @Bean
    public BeanC getBeanC() {
    return new BeanC();
    }
    }

    8
    自动配置 @EnableAutoConfiguration 只需要配置一次
    spring boot根据依赖的jar包来判断

    可以自定义配置来覆盖自动配置。比如db设置等
    要查看自动配置了哪些内容 可以在启动时加 --debug 并查看log

    去除自动配置
    ・@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
    ・spring.autoconfigure.exclude 资源文件


    9
    远程调试
    服务器端启动
    java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n -jar target/myproject-0.0.1-SNAPSHOT.jar

    For example, with Cloud Foundry you can add the
    following to your manifest.yml:
    ---
    env:
    JAVA_OPTS: "-Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n"

    spring.devtools.remote.debug.local-port可以修改端口

    远程监视
    在本地的eclipse里,预先在代码里打上断点,然后debug/debug configurations/Remote Java Application,在Host中输入远程主机的IP,在Port中输入远程主机的监听端口,然后点Debug

    suspend=y/n是否在调试客户端建立连接之后启动 VM 。如果设置为y,它会阻塞程序运行,直到有客户端连接到对应的监听端口,程序才真正开始执行。

    远程debug时修改debug timeout 设定->java->debug 60000ms

    远程更新重启
    服务器端
    ・允许远程
    <build>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
    <excludeDevtools>false</excludeDevtools>
    </configuration>
    </plugin>
    </plugins>
    </build>
    ・设置密码
    spring.devtools.remote.secret=mySecret

    客户端
    ・手动启动 org.springframework.boot.devtools.RemoteSpringApplication
    • Select Run Configurations… from the Run menu.
    • Create a new Java Application “launch configuration”.
    • Browse for the my-app project.
    • Use org.springframework.boot.devtools.RemoteSpringApplication as the main class.
    • Add https://myapp.cfapps.io to the Program arguments (or whatever your remote URL is).


    10
    设定程序的结束code
    org.springframework.boot.ExitCodeGenerator

    @SpringBootApplication
    public class ExitCodeApplication {
    @Bean
    public ExitCodeGenerator exitCodeGenerator() {
    return new ExitCodeGenerator() {
    @Override
    public int getExitCode() {
    return 42;
    }
    };
    }
    public static void main(String[] args) {
    System.exit(SpringApplication
    .exit(SpringApplication.run(ExitCodeApplication.class, args)));
    }
    }


    @RequestMapping(value = "/admin/shutdown", method = RequestMethod.GET)
    public void shutdown() {
    final int exitCode = adminService.savepoint();
    ExitCodeGenerator exitCodeGenerator = new ExitCodeGenerator() {

    @Override
    public int getExitCode() {
    return exitCode;
    }

    };
    SpringApplication.exit(Application.context, exitCodeGenerator);
    }


    11
    读取资源文件
    ·配置 文件地址
    @Configuration
    @PropertySource(value="classpath:/aaa.properties") // 不能使用通配符*等

    ·注入bean
    @Autowired
    Environment env;

    ·读取value
    env.getProperty("server.port2")

    或者
    @Value("${server.port2}")
    String value;

    用资源文件给静态变量赋值 直接@Value永远为null 用set方法注入
    @Value("${my.name}")
    public void setPrivateName(String privateName) {
    Sample.name = privateName;
    }

    或者使用
    @Component
    @ConfigurationProperties("foo")
    public class FooProperties { .... }

    @EnableConfigurationProperties(FooProperties.class) // 有@Component可以省略

    12
    随机值 RandomValuePropertySource
    my.secret=${random.value}
    my.number=${random.int}
    my.bignumber=${random.long}
    my.uuid=${random.uuid}
    my.number.less.than.ten=${random.int(10)}
    my.number.in.range=${random.int[1024,65536]}


    @Value("${random.value}")
    String value;


    13
    Profile
    @Profile("production")
    任何 @Component 和 @Configuration 都可以加 @Profile

    spring.profiles.active=dev,hsqldb

    SpringApplication.setAdditionalProfiles(…) // before run
    SpringApplication.run(...)

    13
    使用spring boot的时候 jsp功能有限制 应使用war方式打包


    14
    Security
    如果Spring Security在classpath上默认使用‘basic’authentication
    要使用方法级别的安全设置 使用@EnableGlobalMethodSecurity

    @EnableWebSecurity
    实现WebSecurityConfigurerAdapter


    15
    DB

    spring.datasource.url=jdbc:mysql://localhost/test
    spring.datasource.username=dbuser
    spring.datasource.password=dbpass
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver

    JdbcTemplate 和 NamedParameterJdbcTemplate 对象会自动生成 可以用 @Autowire 注入


    16
    缓存 Caching

    配置 @EnableCaching
    在要缓存的方法上加 @Cacheable("xxx")


    17
    JMS 消息服务
    ActiveMQ kafka RabitMq等


    18
    调用RESTful API
    用RestTemplate对象来调用
    RestTemplate使用restTemplateBuilder.build()来生成
    spring boot自动生成restTemplateBuilder

    @Service
    public class MyBean {
    private final RestTemplate restTemplate;
    public MyBean(RestTemplateBuilder restTemplateBuilder) {
    this.restTemplate = restTemplateBuilder.build();
    }
    public Details someRestCall(String name) {
    return this.restTemplate.getForObject("/{name}/details", Details.class, name);
    }
    }


    实现RestTemplateCustomizer接口在定义restTemplateBuilder
    可以自定义设置代理等

    19
    Validation
    类上 @Validated
    参数,属性等用 @NotNull @Size(min = 8, max = 10)等


    20
    发送邮件
    spring-boot-starter-mail 使用JavaMailSender

    默认timeout无穷 可设置
    spring.mail.properties.mail.smtp.connectiontimeout=5000
    spring.mail.properties.mail.smtp.timeout=3000
    spring.mail.properties.mail.smtp.writetimeout=5000


    21
    自定义自动配置 starter

    自定义配置类首先是@Configuration
    然后是@ConditionalOnClass and @ConditionalOnMissingBean
    在classpath上有某类且没有自己定义的时候自动配置

    jar包里的文件 META-INF/spring.factories 中列出自动配置类
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=
    com.mycorp.libx.autoconfigure.LibXAutoConfiguration,
    com.mycorp.libx.autoconfigure.LibXWebAutoConfiguration

  • 相关阅读:
    dp学习笔记1
    hdu 4474
    hdu 1158(很好的一道dp题)
    dp学习笔记3
    dp学习笔记2
    hdu 4520+hdu 4522+hdu 4524(3月24号Tencent)
    hdu 1025(最长非递减子序列的n*log(n)求法)
    hdu 2063+hdu 1083(最大匹配数)
    hdu 1023
    《 Elementary Methods in Number Theory 》Exercise 1.3.12
  • 原文地址:https://www.cnblogs.com/xuemanjiangnan/p/8378823.html
Copyright © 2011-2022 走看看