SpringBoot部署在Tomcat應(yīng)用服務(wù)器

作為一個(gè)Java程序員多搀,大部分都會(huì)知道SpringFrameWork摧阅,而如果不知道Spring Boot這個(gè)框架的話,那么這個(gè)程序員都是只是忙于以前的開發(fā)模式钻洒,沒(méi)有認(rèn)識(shí)和提升Java生態(tài)體系的發(fā)展奋姿。其實(shí)話說(shuō)這個(gè)Spring Boot 這個(gè)框架的誕生,主要是為了減輕Java開發(fā)人員對(duì)于Spring對(duì)于各個(gè)開源框架整合的各類繁瑣配置文件素标,提高開發(fā)效率称诗,專注于業(yè)務(wù)邏輯的開發(fā)。

言歸正傳头遭,還是開始我們的主題寓免。Spring Boot一般在官網(wǎng)的例子,都是直接是使用maven check out 下來(lái)parent文件以及相關(guān)的jar计维,直接寫一個(gè)APP類袜香,就是直接運(yùn)行。如下:
首先是POM.XML文件

<?xml version="1.0" encoding="UTF-8"?>
<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.example</groupId>
    <artifactId>myproject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <!-- Inherit defaults from Spring Boot -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
    </parent>
    <!-- Add typical dependencies for a web application -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    <!-- Package as an executable jar -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

接著是寫一個(gè)APPlication類鲫惶,也就是啟動(dòng)類

package org.suyisen;

import java.util.Arrays;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class SuyisenApplication {
    public static void main(String[] args) {
        SpringApplication.run(SuyisenApplication.class, args);
    }
    @Bean
    public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
        return args -> {
            System.out.println("Let's inspect the beans provided by Spring Boot:");
            String[] beanNames = ctx.getBeanDefinitionNames();
            Arrays.sort(beanNames);
            for (String beanName : beanNames) {
                System.out.println(beanName);
            }
        };
    }
}

同時(shí)在新增一個(gè)Controller就可以搭建簡(jiǎn)單的web應(yīng)用了蜈首。

package org.suyisen;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;

@RestController
public class SuyisenController {

    @RequestMapping("/suyisen")
    public String index() {
        return "Greetings from Spring Boot!";
    }
}

在瀏覽器請(qǐng)求一下:http://localhost:8080/suyisen,結(jié)果如下:

123.png

從上面的步驟來(lái)說(shuō)欠母,其實(shí)真的很簡(jiǎn)單欢策,一兩個(gè)類,就完成了一個(gè)web應(yīng)用的開發(fā)赏淌。
然而踩寇,對(duì)于一般生產(chǎn)環(huán)境的應(yīng)用,往往不是這樣子簡(jiǎn)單六水,而且也不是簡(jiǎn)單部署俺孙,更加不是隨便整合開發(fā)。這個(gè)需要詳細(xì)了解整個(gè)Spring Boot的框架掷贾,里面的運(yùn)行機(jī)制睛榄,才能運(yùn)籌帷幄。另想帅,本文不是專門看源碼懈费,只是簡(jiǎn)單了解Spring Boot運(yùn)行的原理,后續(xù)有機(jī)會(huì)再去深入了解源碼博脑,熟知整體的設(shè)計(jì)框架憎乙。
我們依然從啟動(dòng)類去深入了解票罐,org.springframework.boot.SpringApplication,再看到這個(gè)類的run方法泞边,追蹤到最后實(shí)現(xiàn)的方法:

/**
     * Run the Spring application, creating and refreshing a new
     * {@link ApplicationContext}.
     * @param args the application arguments (usually passed from a Java main method)
     * @return a running {@link ApplicationContext}
     */
    public ConfigurableApplicationContext run(String... args) {
        StopWatch stopWatch = new StopWatch();
        stopWatch.start();
        ConfigurableApplicationContext context = null;
        FailureAnalyzers analyzers = null;
        configureHeadlessProperty();
        SpringApplicationRunListeners listeners = getRunListeners(args);
        listeners.starting();
        try {
            ApplicationArguments applicationArguments = new DefaultApplicationArguments(
                    args);
            ConfigurableEnvironment environment = prepareEnvironment(listeners,
                    applicationArguments);
            Banner printedBanner = printBanner(environment);
            context = createApplicationContext();
            analyzers = new FailureAnalyzers(context);
            prepareContext(context, environment, listeners, applicationArguments,
                    printedBanner);
            refreshContext(context);
            afterRefresh(context, applicationArguments);
            listeners.finished(context, null);
            stopWatch.stop();
            if (this.logStartupInfo) {
                new StartupInfoLogger(this.mainApplicationClass)
                        .logStarted(getApplicationLog(), stopWatch);
            }
            return context;
        }
        catch (Throwable ex) {
            handleRunFailure(context, listeners, analyzers, ex);
            throw new IllegalStateException(ex);
        }
    }

就是創(chuàng)建相關(guān)上下文ApplicationContext以及相關(guān)的監(jiān)聽器该押,同時(shí)生成IOC容器,實(shí)例化相關(guān)的bean阵谚,完成初始化蚕礼。
究其原因,SpringBoot整體框架梢什,有三個(gè)jar包奠蹬,是最為關(guān)鍵,分別為:spring-boot-starter-...RELEASE.jar嗡午、spring-boot-autoconfigure-1.5.8.RELEASE.jar 囤躁、spring-boot-...RELEASE.jar。
1荔睹、spring-boot-starter-...RELEASE.jar:這個(gè)包里面沒(méi)有任何的Java代碼狸演,只是POM文件,里面只是關(guān)注于SpringBoot所依賴的其他jar包僻他。
2宵距、spring-boot-
...RELEASE.jar:該包是SpringBoot的核心包。完成SpringBoot的整體框架的大部分功能吨拗。比如一般的初始化满哪,在spring.factoies文件里面,除了EnableAutoConfiguration劝篷,還是有其他的初始化哨鸭。

# PropertySource Loaders
org.springframework.boot.env.PropertySourceLoader=\
org.springframework.boot.env.PropertiesPropertySourceLoader,\
org.springframework.boot.env.YamlPropertySourceLoader

# Run Listeners
org.springframework.boot.SpringApplicationRunListener=\
org.springframework.boot.context.event.EventPublishingRunListener

# Application Context Initializers
org.springframework.context.ApplicationContextInitializer=\
org.springframework.boot.context.ConfigurationWarningsApplicationContextInitializer,\
org.springframework.boot.context.ContextIdApplicationContextInitializer,\
org.springframework.boot.context.config.DelegatingApplicationContextInitializer,\
org.springframework.boot.context.embedded.ServerPortInfoApplicationContextInitializer

# Application Listeners
org.springframework.context.ApplicationListener=\
org.springframework.boot.ClearCachesApplicationListener,\
org.springframework.boot.builder.ParentContextCloserApplicationListener,\
org.springframework.boot.context.FileEncodingApplicationListener,\
org.springframework.boot.context.config.AnsiOutputApplicationListener,\
org.springframework.boot.context.config.ConfigFileApplicationListener,\
org.springframework.boot.context.config.DelegatingApplicationListener,\
org.springframework.boot.liquibase.LiquibaseServiceLocatorApplicationListener,\
org.springframework.boot.logging.ClasspathLoggingApplicationListener,\
org.springframework.boot.logging.LoggingApplicationListener

# Environment Post Processors
org.springframework.boot.env.EnvironmentPostProcessor=\
org.springframework.boot.cloud.CloudFoundryVcapEnvironmentPostProcessor,\
org.springframework.boot.env.SpringApplicationJsonEnvironmentPostProcessor

# Failure Analyzers
org.springframework.boot.diagnostics.FailureAnalyzer=\
org.springframework.boot.diagnostics.analyzer.BeanCurrentlyInCreationFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.BeanNotOfRequiredTypeFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.BindFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.ConnectorStartFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.NoUniqueBeanDefinitionFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.PortInUseFailureAnalyzer,\
org.springframework.boot.diagnostics.analyzer.ValidationExceptionFailureAnalyzer

# FailureAnalysisReporters
org.springframework.boot.diagnostics.FailureAnalysisReporter=\
org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter

3、spring-boot-autoconfigure-1.5.8.RELEASE.jar:該包主要是完成整合其他各個(gè)開源框架携龟,滿足SpringBoot設(shè)計(jì)的初衷兔跌,簡(jiǎn)單快速完成配置勘高∠矿可以在其jar里面的META-INF/spring.factories文件看得到各類的自動(dòng)化配置,而該類就是org.springframework.boot.autoconfigure.EnableAutoConfiguration华望,里面有相當(dāng)多的自動(dòng)化配置

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\
org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.ldap.LdapDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,\
org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration,\
org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,\
org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\
org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration,\
org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\
org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,\
org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,\
org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,\
org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration,\
org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration,\
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\
org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration,\
org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,\
org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration,\
org.springframework.boot.autoconfigure.ldap.embedded.EmbeddedLdapAutoConfiguration,\
org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration,\
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,\
org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,\
org.springframework.boot.autoconfigure.mobile.DeviceResolverAutoConfiguration,\
org.springframework.boot.autoconfigure.mobile.DeviceDelegatingViewResolverAutoConfiguration,\
org.springframework.boot.autoconfigure.mobile.SitePreferenceAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
org.springframework.boot.autoconfigure.reactor.ReactorAutoConfiguration,\
org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.SecurityFilterAutoConfiguration,\
org.springframework.boot.autoconfigure.security.FallbackWebSecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.OAuth2AutoConfiguration,\
org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration,\
org.springframework.boot.autoconfigure.session.SessionAutoConfiguration,\
org.springframework.boot.autoconfigure.social.SocialWebAutoConfiguration,\
org.springframework.boot.autoconfigure.social.FacebookAutoConfiguration,\
org.springframework.boot.autoconfigure.social.LinkedInAutoConfiguration,\
org.springframework.boot.autoconfigure.social.TwitterAutoConfiguration,\
org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration,\
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,\
org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration,\
org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration,\
org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration,\
org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration,\
org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration,\
org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration,\
org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration,\
org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.WebSocketMessagingAutoConfiguration,\
org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration

對(duì)于讀取這種spring.factories文件蕊蝗,則是使用類似于Java SPI(SPI的全名為Service Provider Interface)方式完成,SpringBoot則是使用Spring-Core的org.springframework.core.io.support.SpringFactoriesLoader赖舟,如圖


456.png
789.png

SpringBoot框架的另外一個(gè)初衷蓬戚。也是為了更加好的整合開放,因此宾抓,都是提供開放接口子漩。所以我們是可以自己創(chuàng)建一個(gè)模塊豫喧,自動(dòng)化完成配置,完成SpringBoot簡(jiǎn)單化配置幢泼,納入Spring IOC管理紧显。可以參考SpringBoot整合MyBatis框架缕棵。

而對(duì)于SpringBoot部署到外部的應(yīng)用服務(wù)器孵班,則是需要實(shí)現(xiàn)抽象類org.springframework.boot.web.support.SpringBootServletInitializer,在現(xiàn)行的servlet3.0的應(yīng)用服務(wù)器自動(dòng)完成加載招驴。
先說(shuō)在原本的嵌入Tomcat運(yùn)行的程序篙程,那么就是spring.factories文件的org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration,能夠加載自動(dòng)化配置别厘。本文暫時(shí)不講解源碼分析虱饿,因此暫時(shí)不看嵌入Tomcat的啟動(dòng)流程。

而我們現(xiàn)在則是需要實(shí)現(xiàn)SpringBoot部署應(yīng)用在Tomcat應(yīng)用服務(wù)器丹允。
首先郭厌,我們則需要實(shí)現(xiàn)抽象類org.springframework.boot.web.support.SpringBootServletInitializer,代碼如下:

package org.suyisen.software.openplatform.application;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.suyisen.software.openplatform.config.OpenPlatFromConfig;

/**
 * 
 * @author suyisen
 *
 */
public class OpenPlatFormBaseApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(OpenPlatFromConfig.class);
    }
    
}

另外需要添加config文件雕蔽,如下:

package org.suyisen.software.openplatform.config;

import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * 
 * @author Administrator
 *
 */
@Configuration
@EnableAutoConfiguration(exclude= {MybatisAutoConfiguration.class})
@ComponentScan(basePackages= {"org.software"})
public class OpenPlatFromConfig {

}

我在配置文件沒(méi)有實(shí)現(xiàn)任何bean折柠,就是為了測(cè)試作用,看能不能使用Tomcat啟動(dòng)

配置一下Tomcat服務(wù)器批狐,直接在IDE上面debug運(yùn)行Tomcat server即可扇售。


success.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市嚣艇,隨后出現(xiàn)的幾起案子承冰,更是在濱河造成了極大的恐慌,老刑警劉巖食零,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件困乒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡贰谣,警方通過(guò)查閱死者的電腦和手機(jī)娜搂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吱抚,“玉大人百宇,你說(shuō)我怎么就攤上這事∶乇” “怎么了携御?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我啄刹,道長(zhǎng)涮坐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任誓军,我火速辦了婚禮膊升,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谭企。我一直安慰自己廓译,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布债查。 她就那樣靜靜地躺著非区,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盹廷。 梳的紋絲不亂的頭發(fā)上征绸,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音俄占,去河邊找鬼管怠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛缸榄,可吹牛的內(nèi)容都是我干的渤弛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼甚带,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼她肯!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起鹰贵,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤晴氨,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后碉输,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體籽前,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年敷钾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了枝哄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闰非,死狀恐怖膘格,靈堂內(nèi)的尸體忽然破棺而出峭范,到底是詐尸還是另有隱情财松,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站辆毡,受9級(jí)特大地震影響菜秦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜舶掖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一球昨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧眨攘,春花似錦主慰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至情竹,卻和暖如春藐不,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秦效。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工雏蛮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人阱州。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓挑秉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親苔货。 傳聞我的和親對(duì)象是個(gè)殘疾皇子衷模,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容