史上最全 SpringBoot 2.2.0.RELEASE 版本特性介绍(全文英译版)

Spring Boot 2.2.RELEASE 

参考链接:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.2-Release-Notes#new-and-noteworthy

Spring Boot 2.2 Release Notes

Upgrading from Spring Boot 2.1

Deprecations from Spring Boot 2.1

在Spring Boot 2.1中弃用的类、方法和属性已经在这个版本中删除了。请确保在升级之前没有调用已弃用的方法。

Spring Framework 5.2

This release upgrades to Spring Framework 5.2. Please refer to Spring Framework’s upgrade documentation for further details.

这个版本升级到Spring Framework 5.2。请参考Spring Framework的升级文档了解更多细节。-Spring Framework’s upgrade documentation

JMX now disabled by default

从 #16090开始,JMX在默认情况下不再启用。可以通过配置属性spring.jmx.enabled=true启用该特性。如果您正在使用IDE特性来管理您的应用程序,您可能还需要启用该标志。

Fork enabled by default in Maven Plugin

由Maven插件运行的Spring Boot 应用程序现在默认是分叉的。如果您使用-D来定制属性,那么这些属性将不再传递给Spring Boot应用程序。可以使用-Dspring-boot.run.jvmArguments指定这些属性,并且存在专用选项,比如启用配置文件。更多细节请参考参考文档-the reference documentation

Jakarta EE dependencies

在可能的情况下,Spring Boot’s starters中我们将Java EE依赖关系javax. group ID 转移到Jakarta EE依赖关系 jakarta. group ID。Jakarta EE API依赖项的依赖项管理已经添加Java EE API依赖项的现有依赖项管理中。Java EE API依赖项的依赖项管理将在将来被删除,并鼓励所有用户迁移到Jakarta EE API依赖项。

作为Java EE到Jakarta EE迁移的一部分,两个依赖项在其最新的维护版本中更改了工件ID。com.sun.mail:javax.mail现在是com.sun.mail:jakarta.mail和org.glassfish:javax.el现在是org.glassfish:jakarta.el。在不太可能的情况下,您正在直接使用这些依赖,请更新您的pom.xml或build.gradle。

JUnit 5

spring-boot-starter-test现在默认提供JUnit 5。默认情况下,JUnit 5的老式引擎支持现有的基于JUnit 4的测试类,这样您就可以在准备好迁移到JUnit 5了。还可以在同一个模块中混合使用基于JUnit 4和JUnit 5的测试类。如果您愿意,这允许您逐步迁移到JUnit 5。

注意,JUnit 4的Maven Surefire插件不支持listener属性。如果您的Maven配置与以下类似:

你不能使用 junit-vintage-engine ,你需要显式回滚到JUnit 4:

AssertJ 3.12

此版本升级到AssertJ 3.12,该版本包含与Iterator相关的断言的一个breaking  API更改。详情请参阅AssertJ发布说明- AssertJ release notes

Devtools configuration no longer considered in integration tests

集成测试中不再考虑在主目录中指定的Devtools配置。

Spring HATEOAS 1.0

This release upgrades to Spring HATEOAS 1.0 which contains some breaking API changes. Please see the blog post that announced the M1 release for details and a script that can be used to ease the migration.

这个版本升级到了Spring HATEOAS 1.0,其中包含了一些breaking API变化。请参阅宣布M1发行版的博客文章- blog post that announced the M1 release,了解详细信息和一个可用于简化迁移的脚本。

DataSize migration for logging.file size-based properties

logging.file.max-size和logging.file.total-size-cap现在使用标准的DataSize类型来替代专有的FileSize类型。如果您正在使用这些属性中的任何一个,请确保与标准格式对齐-align to the standard format

DataSource health

数据源运行状况指示器包含一个额外的validationQuery属性,该属性带有针对数据源使用的验证查询。此外,曾经由hello属性提供的查询结果已重命名为result。

Elasticsearch

这个版本升级到了Elasticsearch 6.7,其中包含了一些breaking API更改。详情请参阅 6.56.66.7破坏性改变。

Elasticsearch传输和Jest客户端都已被弃用,取而代之的是其他选项,比如RestHighLevelClient。对Elasticsearch支持的参考文档已经更新-reference docs on Elasticsearch support

Hibernate Dialect

Spring Boot现在让Hibernate选择要使用的方言(dialect),而不是根据检测到的数据库应用默认的方言。如果你对这个特性感兴趣,请确保你没有明确指定数据库平台(例如通过spring.jpa.database或spring.jpa.database-platform)。

如果您以前配置过一种方言,那么您可能希望删除自定义。

Actuator HTTP Trace and Auditing are disabled by default

执行器的HTTP跟踪和审计特性在默认情况下不再启用,因为默认存储库实现在内存中,可能会消耗太多资源,对于健壮的、生产级的HTTP跟踪来说,对集群不友好。我们建议使用Spring Cloud Sleuth 或类似的工具。

要启用HTTP跟踪,请贡献一个实现HttpTraceRepository或AuditEventRepository的bean来重新启用这些特性。可以使用配置属性来关闭这些特性,即使这些bean存在(请参阅management.auditevents.enabled和management.trace.http.enabled)。

Gradle requirements

对Gradle的最低要求已经改变——Spring Boot现在需要Gradle 4.10+。请相应的升级。

Jetty logging configuration

server.jetty.accesslog.* configuration 属性与日志格式相关的内容不再可用(与日志文件相关的配置属性仍然存在)。

如果您的应用程序正在使用这些属性,则会引入两个新的键:format和custom-format;格式允许您选择现有的格式,自定义格式允许您使用自己的格式:

不支持的选项现在转换为定义自定义日志格式,并使用定义在Jetty’s CustomRequestLog

Hamcrest 2.1

这个版本升级到Hamcrest 2.1。对于大多数用户来说,这应该是一个临时的替代品。如果你对 org.hamcrest:hamcrest-core或org.hamcrest:hamcrest-library有直接的依赖,请使用新的组合模块org.hamcrest:hamcrest。如果您通过spring-boot-starter-test依赖Hamcrest,则不需要任何操作。

Freemarker templates configuration

This release changes the default template file extension for Freemarker templates. This aligns Spring Boot with safe configuration defaults for web applications. Please rename existing templates from *.ftl to *.ftlh when upgrading.

这个版本更改了Freemarker模板的默认模板文件扩展名。这使Spring Boot与web应用程序的安全配置默认值保持一致。在更新时,请重命名存在的模块从 *.ftl到 *.ftlh。

Tomcat’s MBean Registry

Tomcat’s MBean Registry is now disabled by default, saving approximately 2MB of heap. If you want to use Tomcat’s MBeans, for example so that they can be used to expose metrics via Micrometer, set the server.tomcat.mbeanregistry.enabled to true.

Tomcat的MBean注册中心在默认情况下是禁用的,可以节省大约2MB的堆。例如,如果您希望使用Tomcat的MBeans,以便可以使用它们通过Micrometer公开指标,则设置server.tomcat.mbeanregistry.enabled=true。

Logback max history

默认Logback配置中的<rollingPolicy>已更新为使用<maxHistory> 7天。可以使用logging.file.max-history 配置属性调优它。性。

HttpHiddenMethodFilter disabled by default

处理_method请求参数的过滤器现在在默认情况下是禁用的,因为如果请求体可能包含参数,它会导致请求体的早期消耗。这可以修复通过设置spring.webflux.hiddenmethod.filter.enabled或 spring.mvc.hiddenmethod.filter.enabled。

Health Indicator

许多类已被弃用,以实现新的运行状况指示器组特性。如果您正在通过CompositeHealthIndicatorConfiguration配置一个自定义HealthIndicator ,则需要将其更新为使用CompositeHealthContributorConfiguration。

Micrometer 'New Relic' eventType

Micrometer 1.3已经将发布的每个度量值的eventType更改为一个固定值-changed the eventType 。这与New Relic的最佳实践-best practices.相一致。

Spring Boot 2.2将使用management.metrics.export.newrelic.event-type的值作为eventType,并为上下文添加“metricName”和“metricType”属性。如果没有显式设置事件类型属性,则使用SpringBootSample。

If you prefer to use the previous behavor where the meter name was used as the eventType, you can set the management.metrics.export.newrelic.meter-name-event-type-enabled property to true.

如果您喜欢使用前面的行为,其中meter名称被用作eventType,您可以设置 management.metrics.export.newrelic.meter-name-event-type-enabled属性为true。

Health Endpoint JSON

通过将第一级元素的详细信息重命名为组件, /actuator/health 端点更改了结果JSON格式。这有助于将HealthIndicator返回的实际详细信息与组成复合健康状况的组件指示器区分开来。

由于更改的结果,执行器介质类型已经从application/vnd.spring-boot.actuator.v2+json转移到 application/vnd.spring-boot.actuator.v3+json。如果你有需要使用旧格式的工具,你可以使用带有V2媒体类型的HTTP Accept: heade,application/vnd.spring-boot.actuator.v2+json。

DevTools config directory

The preferred location for global DevTools settings is now ~/.config/spring-boot. Any of the following files can be used:

全局DevTools设置的首选位置现在是~/.config/spring-boot。可以使用以下任何文件:

spring-boot-devtools.properties

spring-boot-devtools.yaml

spring-boot-devtools.yml

详情请参阅参考文档的相关部分- relevant section

InMemoryUserDetailsManager

为了防止为资源服务器应用程序生成和记录默认密码,在JwtDecoder bean或OpaqueTokenIntrospector bean存在的情况下,不再创建InMemoryUserDetailsManager类型的bean。如果您希望自定义安全配置,使其需要一个InMemoryUserDetailsManager,那么您需要自己创建bean。

Sample projects renamed and relocated

样例项目已被重命名为冒烟测试,以更好地反映其预期用途。它们也在源存储库中重新定位,现在可以在here找到它们。

New and Noteworthy

Tip 检查 the configuration changelog 配置更改的完整概述。

Java 13 support

Spring Boot 2.2 为 Java 13添加支持。Java 8 and 11 也被支持。

Performance improvements

通过在Spring Boot的@Configuration类中使用proxyBeanMethods=false,启动时间和内存使用量已经减少。proxyBeanMethods是Spring Framework 5.2 M1中 @Configuration上引入的一个新属性。proxyBeanMethods也可以作为@SpringBootApplication和@SpringBootConfiguration的属性。

当开发时在Gradle 或spring-boot:run in Maven中使用bootRun启动应用程序时,JVM将配置标记(-Xverify:none和-XX:TieredStopAtLevel=1)来优化它以减少启动时间。在JDK 13上运行时,没有指定-Xverify:none,因为它已被弃用。

在这个版本中还有其他一些性能改进:

绑定大量配置属性所需的时间大大减少了

当Spring Boot完全准备好PersistenceUnit通过扫描JPA实体时,Hibernate自己的实体扫描已经被禁用,因为它是冗余的

自动配置中的注入点已经被细化为仅在必须创建bean时才适用

与执行器端点相关的bean现在只有在端点被启用和公开(通过JMX或HTTP)的情况下才会被创建

编解码器自动配置的条件已得到改进,以便在编解码器不被使用时不再配置它们

默认情况下,Tomcat的MBean注册表已被禁用,这将Tomcat的内存占用减少了大约2MB。

Lazy initialization

现在可以通过spring.main.lazy-initialization属性启用全局延迟初始化来减少启动时间。请注意,使用该功能是有代价的:

当任何延迟的初始化发生时,HTTP请求的处理可能需要更长的时间

通常在启动时发生的故障现在要到以后才会发生

单个bean可以通过使用@Lazy(false)注释它们的定义来选择不进行延迟初始化。如果不能使用@Lazy(false)来选择不进行延迟初始化,则可以使用LazyInitializationExcludeFilter bean。例如,要永远不将IntegrationFlow bean设置为lazy,您可以使用以下代码:

Spring Data Moore

Spring Boot 2.2附带了Spring Data Moore。Please see the What’s new in Spring Data Moore blog post to learn more.

Shutdown configuration of task execution and scheduling

The behaviour on shutdown for both the auto-configured TaskExecutor and TaskScheduler is now configurable, see the spring.task.execution.shutdown and spring.task.scheduling.shutdown namespaces for more details.

自动配置的TaskExecutor和TaskScheduler在关机时的行为现在都是可配置的,请参见 spring.task.execution.shutdown和spring.task.scheduling.shutdown 名称空间以了解更多细节。

Kubernetes detection

ConditionalOnCloudPlatform现在可以检测应用程序是否在Kubernetes上运行。

Test Application Arguments in integration tests

SpringBootTest允许指定应用程序参数,这些参数将触发一个ApplicationArguments bean的创建。

@ConfigurationProperties scanning

现在可以通过类路径扫描找到带@ConfigurationProperties注解的类,这是使用@EnableConfigurationProperties或@Component的替代方法。将@ConfigurationPropertiesScan添加到应用程序中以启用扫描。

备注:在Spring Boot 2.2.0中默认启用了配置属性扫描,但是在Spring Boot 2.2.1中,你必须选择使用@ConfigurationPropertiesScan。

Immutable @ConfigurationProperties binding

配置属性现在支持基于构造函数的绑定,这允许带@ConfigurationProperties-annotated 类是不可变的。基于构造函数的绑定可以通过使用注解@ConfigurationProperties类或@ConstructorBinding构造函数之一来启用。像@DefaultValue和@DateTimeFormat这样的注解现在可以在配置属性绑定提供的构造函数参数上使用。详情请参阅参考文档的相关部分= the relevant section

RSocket Support

在这个版本中添加了一个新的Spring Boot启动器, spring-boot-starter-rsocket。这个启动器提供了构建使用RSocket支持的应用程序所需的依赖项。RSocket策略可以自动配置为使用CBOR和JSON的RSocket负载进行编码和解码提供所需的基础设施。一个RSocketRequester.Builder是自动配置的,允许您创建一个RSocketRequester发送请求到远程RSocket服务。要了解更多,请查看参考文档中的相关部分-relevant section

Spring Security的RSocket集成的自动配置现在可以在类路径上使用spring-security-rsocket模块时使用。自动配置将启用RSocket安全性,并使用Spring Security的拦截器配置服务器RSocket工厂。

When testing an RSocket server application, the local.rsocket.server.port property is set to the port that the RSocket server is listening on. It can be injected into test classes using @LocalRSocketServerPort.

当测试RSocket服务器应用程序时,local.rsocket.server.port 属性设置为RSocket服务器正在监听的端口。它可以使用@LocalRSocketServerPort注入到测试类中。

ApplicationContextRunner simple bean registration

ApplicationContextRunner测试实用程序现在允许内联注册bean,有关更多细节,请参阅withBean。

RestTemplateBuilder request customisation

Methods have been added to RestTemplateBuilder to add default headers to all requests and to enable general request customization.

RestTemplateBuilder中添加了一些方法,以向所有请求添加默认头,并启用通用请求定制。

Reactive Elasticsearch Auto-configuration

Spring Data Moore中引入的响应式Elasticsearch组件增加了自动配置功能。ReactiveElasticSearchTemplate是用 spring.data.elasticsearch.client.reactive.*属性自动配置的。还提供了对响应式Elasticsearch存储库的自动配置支持。

Plain text support for Thread dump endpoint

threaddump执行器端点现在可以以纯文本的形式返回一个线程转储,它与Thread Dump Analyzerhttps://fastthread.io都兼容。

Configurable converters for Actuator endpoint input parameters

可以使用自定义的@EndpointConverter-annotated转换器管理执行器@Endpoint的输入参数。

Callback for Redis cache configuration

RedisCacheManager配置最近得到了改进,RedisCacheManagerBuilderCustomizer bean允许您在使用构建器配置不可变的RedisCacheManager之前获得构建器的句柄。

Qualifier for Spring Batch datasource

在具有多个数据源的环境中,可以使用@BatchDataSource限定数据源bean,以指示它是Spring Batch使用的数据源。

Build info repeatable output

The build info goal has an extra time property that allows to configure how build.time is handled. It can be disabled completely or set to a fixed time to make the output of build.properties repeatable.

构建信息目标有一个额外的时间属性,允许配置build.time如何处理。可以完全禁用它,也可以将其设置为一个固定的时间来输出构建可重复的build.properties属性。

Health indicator for Hazelcast

Hazelcast现在提供了一个健康指示器(HealthIndicator)。

Idle JDBC connections metrics

It is now possible to track the total size of a connection pool by tracking the size and idle metrics. If you have a custom DataSourcePoolMetadata implementation, consider implementing the getIdle method.

现在可以通过跟踪大小和空闲指标来跟踪连接池的总大小。如果您有一个自定义DataSourcePoolMetadata实现,那么考虑实现getIdle方法。

Health indicator groups

现在可以将运行状况指标组织到组中。一个典型的例子是,如果您将应用程序部署到Kubernetes,您可能需要一组不同的“活跃度(liveness)”和“准备状态(readiness)”探测的运行状况指示器。

组(Groups )可以通过配置属性来配置。下面将创建一个仅带有DataSource指示器的自定义组:

可以通过点击localhost:8080/actuator/health/custom来调用自定义组。查看更新的参考文档- updated reference documentation以获取更多细节。

Health Endpoint component details

从 /actuator/health返回的组件详细信息现在可以配置为独立于详细信息显示。management.endpoint.health.show-components属性的工作方式与show-details类似,可以设置为never、when-authorized或always。

例如,如果您希望始终显示为创建系统健康状况而组成的各个健康指标,但又不想显示它们的详细信息,则可以使用:

还可以在运行状况指标组上设置相同的属性。

Auto-configuration for Flyway JavaMigrations

Flyway将自动配置为使用在应用程序上下文中找到的任何JavaMigration bean。

Sanitization of URI Properties in Actuator Endpoints

configprops和env端点执行的消毒(sanitization)操作已得到改进,包括URI属性。现在,在URI的用户信息中找到的任何密码都将被清除。

Banners

ASCII横幅文件现在可以通过使用{AnsiColor.NNN}的ANSI 256颜色转义码。(其中NNN是颜色代码(color code))。你也可以通过设置 spring.banner.image.bitdepth属性为8将它们与图像横幅一起使用。我们还添加了spring.banner.image.pixelmode属性,可以设置为块以使用ASCII块字符。

结果是这样的:

animated ascii art 256

SAML Auto-configuration

Auto-configuration for Spring Security’s SAML 2.0 Relying Party is now available when its spring-security-saml2-service-provider module is on the classpath. Relying parties can be registered using the spring.security.saml2.relyingparty.registration.* properties.

当Spring Security的SAML 2.0依赖方的spring-security-saml2-service-provider模块位于类路径中时,就可以使用自动配置功能了。依赖方可以使用spring.security.saml2.relyingparty.registration.* 属性。

Dependency Upgrades

Spring Boot 2.2升级到几个Spring项目的新版本:

Reactor Dysprosium

Spring AMQP 2.2

Spring Batch 4.2

Spring Data Moore

Spring Framework 5.2

Spring HATEOAS 1.0

Spring Integration 5.2

Spring Kafka 2.3

Spring Security 5.2

Spring Session Corn

许多第三方依赖关系也得到了更新,其中一些比较值得注意的是:

Artemis 2.9

Elasticsearch 6.7

Flyway 6.0

Git Commit ID Plugin 3.0

Hazelcast 3.12

HSQLDB 2.5

Jackson 2.10

Jedis 3.1

Jersey 2.29

Kafka 2.3

Lettuce 5.2

Micrometer 1.3

Mockito 3.1

Solr 8.0

Miscellaneous

除了上面列出的变化,还有很多小的调整和改进,包括:

如果您将Servlet包装为执行器端点,则可以配置loadOnStartup。

Flyway bootstrap故障由专用故障分析仪(FailureAnalyzer)覆盖。

Kafka批处理监听器的MessageConverter是自动配置的。

对Jaybird 4进行支持 (jdbc:firebird prefix).

添加对Neo4j-OGM原生类型的可选加入支持。

Client-side HTTP-metrics 有一个结果标签。

第三方依赖项的大量升级:

Prometheus push gateway现在可以使用https来配置。

打印机和解析器bean会自动注册到应用程序转换服务中。

当使用H2控制台自动配置时,JDBC连接URL现在在启动时被记录,以方便连接。

Couchbase role-based access is now supported via spring.couchbase.username and spring.couchbase.password.

现在通过spring.couchbase.username和spring.couchbase.password支持基于角色的访问。

已经添加了对OAuth2资源服务器不透明令牌身份验证的支持,可以使用 spring.security.oauth2.resourceserver.opaquetoken属性进行配置。

如果使用spring.config.location指定的文件具有PropertySourceLoader无法读取的扩展名,应用程序将很快失败。

用于重新打包应用程序的布局可以使用spring-boot.repackage.layout 属性在Maven命令行上设置。

RestTemplateBuilder#defaultHeader接受多个值。

自定义资源处理程序可以服务于图标。

Kafka的RecordInterceptor被检测并关联到自动配置的监听器容器。

YAML 配置现在可以对布尔类型使用on或off。

@WebMvcTest 现在扫描 HandlerInterceptor beans.

@WebFluxTest 扫描 WebFilter beans.

JMS侦听器容器接收的可配置超时。

支持Spring Session的刷新模式。

支持Spring AMQP的confirm-type。

Application属性用于配置Jetty的线程池的属性。

在JUnit 5中使用@AutoConfigureMockMvc时,支持并行测试执行。

Zip64 文件现在支持内部  "Fat Jars".

The ROLLING_FILE_LOG_PATTERN 现在公开用于logback配置。

你现在可以在任何@SpringBootTest注入和使用定制的WebTestClient。

添加了Oracle JDBC驱动程序的依赖项管理。

添加了对可等待性的依赖管理。

Deprecations in Spring Boot 2.2

 logging.file 属性重命名为 logging.file.name.

logging.path 属性重命名为 logging.file.path.

server.connection-timeout 属性已经被弃用,取而代之的是特定于服务器的属性,因为它们的行为并不完全相同

server.use-forward-headers属性已弃用,转而使用server.forward-headers-strategy;之前server.use-forward-headers=true 将使用web服务器本地支持。现在可以使用server.forward-headers-strategy=native实现相同的功能。因为每个服务器都有特定的行为,所以我们现在提供了一个依赖于Spring的ForwardedHeaderFilter的替代方案:server.forward-headers-strategy=framework。开发人员应该使用最适合他们用例的选项。

ReactiveWebServerApplicationContext#getWebServerFactory.

Maven插件的agent属性已重命名为agents。

Joda时间已被废弃,而支持java.time。

ApplicationHealthIndicator支持总是贡献的PingHealthIndicator。

ConfigurationBeanFactoryMetadata 支持 ConfigurationPropertiesBean。

ConfigurationPropertiesBindingPostProcessor构造函数支持@EnableConfigurationProperties或register方法的。

ConfigurationPropertiesBindingPostProcessor.VALIDATOR_BEAN_NAME 已经移动到EnableConfigurationProperties.VALIDATOR_BEAN_NAME.

ConfigurationPropertiesBindingPostProcessorRegistrar支持@EnableConfigurationProperties.

WebTestClientBuilderCustomizer 已被转移到 org.springframework.boot.test.web.reactive.server.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容