springboot小demo实例

package com.zetyun.mml;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

	public static void main(String[] args) {

		SpringApplication.run(Application.class, args);
	}

}
package com.zetyun.mml.bean;

public class AgentCache {

	private String hostname;
	private String ip;
	private String port;

	public String getHostname() {
		return hostname;
	}

	public void setHostname(String hostname) {
		this.hostname = hostname;
	}

	public String getIp() {
		return ip;
	}

	public void setIp(String ip) {
		this.ip = ip;
	}

	public String getPort() {
		return port;
	}

	public void setPort(String port) {
		this.port = port;
	}

}

 
 
package com.zetyun.mml.bean;

import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ConcurrentHashMap;

public class CacheManager {

	private ConcurrentHashMap<String, String> cacheContainer;
	private static volatile CacheManager cacheManager;
	private long timeout;
	private final String DELIMITER = ":";

	public static CacheManager getInstance() {
		if (cacheManager == null) {
			synchronized (CacheManager.class) {
				if (cacheManager == null) {
					cacheManager = new CacheManager(1000 * 30);
				}
			}
		}
		return cacheManager;
	}

	private CacheManager(long timeout) {
		this.timeout = timeout;
		cacheContainer = new ConcurrentHashMap<>();
		CleanCacheTimer cacheCleanerThread = new CleanCacheTimer();
		cacheCleanerThread.start();
	}

	public void setCache(AgentCache agent) {
		String updateTime = String.valueOf(System.currentTimeMillis());
		String key = String.join(DELIMITER, agent.getHostname(), agent.getIp(), agent.getPort());
		cacheContainer.put(key, updateTime);
	}

	public String getCache() {

		return cacheContainer.toString();
	}

	class CleanCacheTimer {

		public void start() {

			TimerTask task = new TimerTask() {
				@Override
				public void run() {
					System.out.println("TimerTask is called!");
					doRun();
				}
			};

			Timer timer = new Timer();
			timer.schedule(task, 0, 1000 * 3);
		}

		private void doRun() {

			for (Map.Entry<String, String> entry : cacheContainer.entrySet()) {
				String hostKey = entry.getKey();
				String lastTime = entry.getValue();
				if (System.currentTimeMillis() - Long.parseLong(lastTime) >= timeout) {
					cacheContainer.remove(hostKey);
				}
			}

		}

	}

}
package com.zetyun.mml.controller;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.zetyun.mml.bean.AgentCache;
import com.zetyun.mml.bean.CacheManager;

@RestController
@RequestMapping("/agent")
public class AgentInfoController {

	@RequestMapping(value = "/{name}", method = RequestMethod.GET)
	public String sayWorld(@PathVariable("name") String name) {
		return "Hello " + name + " , are you ok? you are the best!";
	}

	/**
	 * 请求内容是一个json串,spring会自动把他和我们的参数bean对应起来,不过要加@RequestBody注解
	 * 
	 * @param name
	 * @param pwd
	 * @return
	 */
	@RequestMapping(value = "/hostinfo", method = RequestMethod.POST)
	public String postHostInfo(@RequestBody AgentCache hostInfo) {
		CacheManager.getInstance().setCache(hostInfo);
		return CacheManager.getInstance().getCache();
	}

}
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.zetyun</groupId>
  <artifactId>my-server</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
   <properties>  
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
        <maven.compiler.source>1.8</maven.compiler.source>  
        <maven.compiler.target>1.8</maven.compiler.target>  
    </properties>  
  
  
  <!-- <build>  
        <defaultGoal>compile</defaultGoal>  
        <plugins>  
            <plugin>  
                <artifactId>maven-assembly-plugin</artifactId>  
                <configuration>  
                    <archive>  
                    </archive>  
                    <descriptorRefs>  
                        <descriptorRef>jar-with-dependencies</descriptorRef>  
                    </descriptorRefs>  
                </configuration>  
                <executions>  
                    <execution>  
                        <id>make-assembly</id>  
                        <phase>package</phase>  
                        <goals>  
                            <goal>single</goal>  
                        </goals>  
                    </execution>  
                </executions>  
            </plugin>  
        </plugins>  
    </build>   -->
    
    
     <build>  
        <plugins>  
            <plugin>  
                <groupId>org.springframework.boot</groupId>  
                <artifactId>spring-boot-maven-plugin</artifactId>  
                <configuration>  
                    <fork>true</fork>  
                </configuration>  
            </plugin>  
        </plugins>  
    </build>  
    
    
      
    <repositories><!-- 代码库 -->  
        <repository>  
            <id>maven-ali</id>  
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>  
            <releases>  
                <enabled>true</enabled>  
            </releases>  
            <snapshots>  
                <enabled>true</enabled>  
                <updatePolicy>always</updatePolicy>  
                <checksumPolicy>fail</checksumPolicy>  
            </snapshots>  
        </repository>  
    </repositories>  
    
      <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.4.RELEASE</version>
    </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-tomcat</artifactId>  
        <scope>provided</scope>  
       </dependency>  
        
    </dependencies>


  
</project>
           
          
   
 


Spring Boot全日志设置

在src/main/resources 目录下建一个logback.xml文件即可。

logback.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">

    <contextName>Logback For demo Mobile</contextName>

    <!-- 设置log日志存放地址 -->
    <!--(改) 单环境设置 -->
    <property name="LOG_HOME" value="D:/eclipse-workspace/my-server/src/main/resources/log" />

    <!-- 多环境设置 (如果你需要设置区分 生产环境,测试环境...)-->
    <!-- 如果需要设置多环境的配置,只设置以下注释内容是不够的,还需要给每个环境设置对应的配置文件如(application-dev.properties)-->
   <!--  
   <springProfile name="linux">
        <property name="LOG_HOME" value="/home/logger/mobile_log" />
    </springProfile>
    <springProfile name="dev">
        <property name="LOG_HOME" value="D:/logger/log4j" />
    </springProfile>
    <springProfile name="test">
        <property name="LOG_HOME" value="D:/logger/log" />
    </springProfile>
    <springProfile name="prod">
        <property name="LOG_HOME" value="D:/logger/log" />
    -->


    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoder默认配置为PartternLayoutEncoder -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} -%msg%n</pattern>
        </encoder>
        <target>System.out</target>
    </appender>
    
    
     <!-- 按照每天生成日志文件 -->
    <appender name="traceAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名 ,每天保存(侧翻)一次 -->
            <FileNamePattern>${LOG_HOME}/trace/%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数 -->
            <MaxHistory>180</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{25} -%msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小 -->
        <triggeringPolicy
                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>20MB</MaxFileSize>
        </triggeringPolicy>
        
         <filter class="ch.qos.logback.classic.filter.LevelFilter">  
            <level>TRACE</level>  
            <onMatch>ACCEPT</onMatch>    
            <onMismatch>DENY</onMismatch>    
        </filter>  
    </appender>
    

    <!-- 按照每天生成日志文件 -->
    <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名 ,每天保存(侧翻)一次 -->
            <FileNamePattern>${LOG_HOME}/debug/%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数 -->
            <MaxHistory>180</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{25} -%msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小 -->
        <triggeringPolicy
                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>20MB</MaxFileSize>
        </triggeringPolicy>
        
         <filter class="ch.qos.logback.classic.filter.LevelFilter">  
            <level>DEBUG</level>  
            <onMatch>ACCEPT</onMatch>    
            <onMismatch>DENY</onMismatch>    
        </filter>  
    </appender>
    
     <!-- 按照每天生成日志文件 -->
    <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名 ,每天保存(侧翻)一次 -->
            <FileNamePattern>${LOG_HOME}/info/%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数 -->
            <MaxHistory>180</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{25} -%msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小 -->
        <triggeringPolicy
                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>20MB</MaxFileSize>
        </triggeringPolicy>
        
         <filter class="ch.qos.logback.classic.filter.LevelFilter">  
            <level>INFO</level>  
            <onMatch>ACCEPT</onMatch>    
            <onMismatch>DENY</onMismatch>    
        </filter>  
    </appender>
    
    
      <!-- 按照每天生成日志文件 -->
    <appender name="warnAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名 ,每天保存(侧翻)一次 -->
            <FileNamePattern>${LOG_HOME}/warn/%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数 -->
            <MaxHistory>180</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{25} -%msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小 -->
        <triggeringPolicy
                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>20MB</MaxFileSize>
        </triggeringPolicy>
        
         <filter class="ch.qos.logback.classic.filter.LevelFilter">  
            <level>WARN</level>  
            <onMatch>ACCEPT</onMatch>    
            <onMismatch>DENY</onMismatch>    
        </filter>  
    </appender>
    
    
    
    
         <!-- 按照每天生成日志文件 -->
    <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名 ,每天保存(侧翻)一次 -->
            <FileNamePattern>${LOG_HOME}/error/%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数 -->
            <MaxHistory>180</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{25} -%msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小 -->
        <triggeringPolicy
                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>20MB</MaxFileSize>
        </triggeringPolicy>
        
         <filter class="ch.qos.logback.classic.filter.LevelFilter">  
            <level>ERROR</level>  
            <onMatch>ACCEPT</onMatch>    
            <onMismatch>DENY</onMismatch>    
        </filter>  
    </appender>
    

    <!-- (改)过滤器,可以指定哪些包,哪个记录到等级, -->
    <!-- 运用的场景比如,你只需要com.demo.controller包下的error日志输出。定义好name="com.demo.controller" level="ERROR" 就行了 -->
    <logger name="com" level="debug">
        <appender-ref ref="traceAppender" />  
        <appender-ref ref="debugAppender" />  
        <appender-ref ref="infoAppender" />  
        <appender-ref ref="warnAppender" />  
        <appender-ref ref="errorAppender" />  
    </logger>

    <!-- 全局,控制台遇到INFO及以上级别就进行输出 -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>
打印的日志会在不同级别的目录下面,例如:配置
${LOG_HOME}/error/%d{yyyy-MM-dd}.log

直接打jar包运行

java -jar ./my-server-0.0.1-SNAPSHOT.jar  com.zetyun.mml.Application
参考链接: https://blog.csdn.net/smilecall/article/details/56288972/




参考链接:https://blog.csdn.net/u012995856/article/details/78090818

GitHub:https://github.com/lliuxiangke0210/my-server








猜你喜欢

转载自blog.csdn.net/liuxiangke0210/article/details/80459531