GithubHelp home page GithubHelp logo

zhenfeng13 / my-blog Goto Github PK

View Code? Open in Web Editor NEW
3.5K 60.0 978.0 29.66 MB

:palm_tree::octocat:A simple & beautiful blogging system implemented with spring-boot & thymeleaf & mybatis My Blog 是由 SpringBoot + Mybatis + Thymeleaf 等技术实现的 Java 博客系统,页面美观、功能齐全、部署简单及完善的代码,一定会给使用者无与伦比的体验

Home Page: http://13blog.site

License: Apache License 2.0

Java 68.87% HTML 27.50% PHP 0.68% SCSS 2.94%
springboot2 springboot spring-boot spring-boot2 springboot-mybatis thymeleaf mybatis docker-compose javablog blog

my-blog's Introduction

My Blog

personal-blog

坚持不易,各位朋友如果觉得项目还不错的话可以给项目一个 star 吧,也是对我一直更新代码的一种鼓励啦,谢谢各位的支持。

my-blog-info

当前分支的 Spring Boot 版本为 2.7.5,想要学习和使用其它版本可以直接点击下方的分支名称跳转至对应的仓库分支中。

分支名称 Spring Boot Version
spring-boot-2.3.7 2.3.7-RELEASE
main 2.7.5
spring-boot-3.x 3.1.0
  • 你可以拿它作为博客模板,因为 My Blog 界面十分美观简洁,满足私人博客的一切要求;
  • 你也可以把它作为 SpringBoot 技术栈的学习项目,My Blog也足够符合要求,且代码和功能完备;
  • 内置三套博客主题模板,主题风格各有千秋,满足大家的选择空间,后续会继续增加,以供大家打造自己的博客;
  • 技术栈新颖且知识点丰富,学习后可以提升大家对于知识的理解和掌握,对于提升你的市场竞争力有一定的帮助。

更多 Spring Boot 实战项目可以关注十三的另一个代码仓库 spring-boot-projects,该仓库中主要是 Spring Boot 的入门学习教程以及一些常用的 Spring Boot 实战项目教程,包括 Spring Boot 使用的各种示例代码,同时也包括一些实战项目的项目源码和效果展示,实战项目包括基本的 web 开发以及目前大家普遍使用的前后端分离实践项目等,后续会根据大家的反馈继续增加一些实战项目源码,摆脱各种 hello world 入门案例的束缚,真正的掌握 Spring Boot 开发。

关注公众号:程序员十三,回复"勾搭"进群交流。

wx-gzh

注意事项

  • 数据库文件目录为static-files/my_blog_db.sql
  • 部署后你可以根据自己需求修改版权文案、logo 图片、备案记录等网站基础信息;
  • My Blog 后台管理系统的默认登陆账号为 admin 默认登陆密码为 123456;
  • layui 版本的 My-Blog,仓库地址 My-Blog-layui ,感兴趣的朋友也可以学习一下;
  • My Blog 还有一些不完善的地方,鄙人才疏学浅,望见谅;
  • 有任何问题都可以反馈给我,我会尽量完善该项目。

Build Status Version 4.0.0 License

项目演示

开发文档

《SpringBoot + Mybatis + Thymeleaf 搭建美观实用的个人博客》(支付减免优惠券码 LSJdK3KT )

lesson-03

联系作者

大家有任何问题或者建议都可以在 issues 中反馈给我,我会慢慢完善这个项目。

My-Blog 在 GitHub 和国内的码云都创建了代码仓库,如果有人访问 GitHub 比较慢的话,建议在 Gitee 上查看该项目,两个仓库会保持同步更新。

效果预览

后台管理页面

  • 登录页

    login

  • 后台首页

    dashboard

  • 文章管理

    blog-list

  • 文章编辑

    edit

  • 评论管理

    comment-list

  • 系统配置

    config

博客展示页面

开发时,在项目中内置了三套博客主题模板,主题风格各有千秋,效果如下:

模板一

  • 首页

    index01

  • 文章浏览

    detail01

  • 友情链接

    link01

模板二

  • 首页

    index02

  • 文章浏览

    detail02

  • 友情链接

    link02

模板三

  • 首页

    index03

  • 文章浏览

    detail03

  • 友情链接

    link03

感谢

my-blog's People

Contributors

dependabot[bot] avatar jonny023 avatar yiancn avatar zhenfeng13 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

my-blog's Issues

Failed to execute goal com.spotify:docker-maven-plugin:0.3.258:build (

docker docker compose 安装完成
在docker-extends 目录下 执行 ./run.sh
报一下错误:

Failed to execute goal com.spotify:docker-maven-plugin:0.3.258:build (default) on project my-blog: Exception caught: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: org.apache.http.conn.HttpHostConnectException: Connect to localhost:2375 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused (Connection refused) -> [Help 1]

安装你的操作用docker在服务器上部署mysql连接好像有问题,遇见过吗

mysql_1 | 2018-05-07 23:02:56.881 [Druid-ConnectionPool-Create-319689067] ERROR com.alibaba.druid.pool.DruidDataSource - create connection error, url: jdbc:mysql://mysql:3306/tale?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true, errorCode 0, state 08001
mysql_1 | com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
mysql_1 | at sun.reflect.GeneratedConstructorAccessor43.newInstance(Unknown Source) ~[?:?]
mysql_1 | at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_111]
mysql_1 | at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_111]
mysql_1 | at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | at com.mysql.jdbc.Util.getInstance(Util.java:408) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2163) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2088) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:806) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:47) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | at sun.reflect.GeneratedConstructorAccessor41.newInstance(Unknown Source) ~[?:?]
mysql_1 | at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_111]
mysql_1 | at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_111]
mysql_1 | at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:410) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:328) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1408) ~[druid-1.0.18.jar!/:1.0.18]
mysql_1 | at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1464) ~[druid-1.0.18.jar!/:1.0.18]
mysql_1 | at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1969) [druid-1.0.18.jar!/:1.0.18]
mysql_1 | Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
mysql_1 |
mysql_1 | The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
mysql_1 | at sun.reflect.GeneratedConstructorAccessor39.newInstance(Unknown Source) ~[?:?]
mysql_1 | at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_111]
mysql_1 | at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_111]
mysql_1 | at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:989) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | at com.mysql.jdbc.MysqlIO.(MysqlIO.java:341) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2251) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2104) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | ... 12 more
mysql_1 | Caused by: java.net.UnknownHostException: mysql
mysql_1 | at java.net.InetAddress.getAllByName0(InetAddress.java:1280) ~[?:1.8.0_111]
mysql_1 | at java.net.InetAddress.getAllByName(InetAddress.java:1192) ~[?:1.8.0_111]
mysql_1 | at java.net.InetAddress.getAllByName(InetAddress.java:1126) ~[?:1.8.0_111]
mysql_1 | at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:188) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | at com.mysql.jdbc.MysqlIO.(MysqlIO.java:300) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2251) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | at com.mysql.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:2104) ~[mysql-connector-java-5.1.40.jar!/:5.1.40]
mysql_1 | ... 12 more

操作到打包部署项目那一步就报错了,没有生成war包

[root@izwz98ej2lk1sl3ik96bn3z ~]# mvn clean package -Dmaven.test.skip=true
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.137 s
[INFO] Finished at: 2018-01-31T11:24:53+08:00
[INFO] Final Memory: 4M/27M
[INFO] ------------------------------------------------------------------------
[ERROR] The goal you specified requires a project to execute but there is no POM in this directory (/root). Please verify you invoked Maven from the correct directory. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MissingProjectException

修复两个bug

1、博客首页最好加个通过 index 也可以访问 ,解决方法在 controller 包下的 indexcontroller 中的首页加上 index,如下 @GetMapping(value = {"/", "index"})
2、博客管理后台注销用户没用,原因是因为 AuthController .java 下的 logout 方法的response.sendRedirect(Commons.site_url()); ,这个 site_url() 方法最后只返回空, 所以不会注销用户,我的解决方法就是在 Commons.java 中加个方法,如下:

/**
     * 在管理员页面退出登录返回到登录界面
     * @return
     */
    public static String site_login() {
        return "admin/login";
    }

然后 logout 方法 中使用 response.sendRedirect(Commons.site_login()); 即可实现点击注销用户后跳转到 登录状态。

My-Blog程序运行在Tomcat外部容器时出现错误

在外部Tomcat部署My-Blog会抛出以下异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authController': Failed to introspect bean class [com.my.blog.website.controller.admin.AuthController] for lookup method metadata: could not find class that it depends on; nested exception is java.lang.NoClassDefFoundError: org/apache/catalina/servlet4preview/http/HttpServletRequest
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:269) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1118) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1091) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) ~[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) ~[spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) ~[spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) ~[spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
at org.springframework.boot.web.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:151) ~[spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
at org.springframework.boot.web.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:131) ~[spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
at org.springframework.boot.web.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:86) ~[spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:169) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5623) ~[catalina.jar:7.0.79]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) ~[catalina.jar:7.0.79]
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899) ~[catalina.jar:7.0.79]
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875) ~[catalina.jar:7.0.79]
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652) ~[catalina.jar:7.0.79]
at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1899) ~[catalina.jar:7.0.79]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_144]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_144]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_144]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_144]
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301) ~[tomcat-coyote.jar:7.0.79]
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) ~[?:1.8.0_144]
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) ~[?:1.8.0_144]
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:618) ~[catalina.jar:7.0.79]
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:565) ~[catalina.jar:7.0.79]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_144]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_144]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_144]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_144]
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301) ~[tomcat-coyote.jar:7.0.79]
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819) ~[?:1.8.0_144]
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801) ~[?:1.8.0_144]
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468) ~[?:1.8.0_144]
at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76) ~[?:1.8.0_144]
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309) ~[?:1.8.0_144]
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401) ~[?:1.8.0_144]
at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829) ~[?:1.8.0_144]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_144]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_144]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_144]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_144]
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357) ~[?:1.8.0_144]
at sun.rmi.transport.Transport$1.run(Transport.java:200) ~[?:1.8.0_144]
at sun.rmi.transport.Transport$1.run(Transport.java:197) ~[?:1.8.0_144]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_144]
at sun.rmi.transport.Transport.serviceCall(Transport.java:196) ~[?:1.8.0_144]
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568) ~[?:1.8.0_144]
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826) ~[?:1.8.0_144]
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683) ~[?:1.8.0_144]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_144]
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682) [?:1.8.0_144]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_144]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_144]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_144]
Caused by: java.lang.NoClassDefFoundError: org/apache/catalina/servlet4preview/http/HttpServletRequest
at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_144]
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[?:1.8.0_144]
at java.lang.Class.getDeclaredMethods(Class.java:1975) ~[?:1.8.0_144]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:613) ~[spring-core-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:524) ~[spring-core-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:510) ~[spring-core-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:247) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
... 63 more
Caused by: java.lang.ClassNotFoundException: org.apache.catalina.servlet4preview.http.HttpServletRequest
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1892) ~[catalina.jar:7.0.79]
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735) ~[catalina.jar:7.0.79]
at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_144]
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[?:1.8.0_144]
at java.lang.Class.getDeclaredMethods(Class.java:1975) ~[?:1.8.0_144]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:613) ~[spring-core-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:524) ~[spring-core-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:510) ~[spring-core-4.3.9.RELEASE.jar:4.3.9.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:247) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
... 63 more

错误原因:AuthController中的HttpServletRequest类引入的包应是javax.servlet.http.HttpServletRequest。希望给后面的朋友提个醒.

BaseInterceptor.java中csrf_token 有验证逻辑嘛?

if (request.getMethod().equals("GET")) { String csrf_token = UUID.UU64(); // 默认存储30分钟 cache.hset(Types.CSRF_TOKEN.getType(), csrf_token, uri, 30 * 60); request.setAttribute("_csrf_token", csrf_token); }

这里不是很明白!!!求大神指教!!!

非docker环境运行启动500错误

启动target目录下的Jar包,在浏览器:http://localhost:8080/myblog/ 报错500,http://localhost:8080/myblog/admin 报错
Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Wed Jul 26 13:28:12 CST 2017
There was an unexpected error (type=Not Found, status=404).
No message available

log里面报错内容:

2017-07-26 13:27:53.647 [http-nio-8080-exec-3] ERROR com.my.blog.website.controller.GlobalExceptionHandler - find exception:e=query content by id and return is not one
query content by id and return is not one
请问这个是什么问题啊

在thymeleaf模板引擎中调用主题公共函数是如何实现的?


如上会调用Commons中的permalink()函数,然而我新建一个Spring Boot+Thymeleaf项目(非作者项目)却无法实现,提示Method call: Attempted to call method test() on null context object(test()是测试的方法);查了很多thymeleaf的教程也没有提到过这个,望解答

request 与 model

发现项目里填充 view 时用的都是 request.setAttribute, 是个人习惯吗?

设置contextPath的问题

应部署需要设置contextPath,但设置了就无法正常使用了

当在application-default.properties中设置contextPath时(server.context-path=/xv),项目url路由失效。

虚拟机与Docker有何不同

#虚拟机与Docker有何不同
http://www.techug.com/post/comparing-virtual-machines-vs-docker-containers.html

原文链接 http://www.cnblogs.com/kex1n/p/6933039.html

译者按: 各种虚拟机技术开启了云计算时代;而Docker,作为下一代虚拟化技术,正在改变我们开发、测试、部署应用的方式。那虚拟机与Docker究竟有何不同呢?

原文: Comparing Virtual Machines vs Docker Containers

译者: Fundebug

为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。

首先,大家需要明确一点,Docker容器不是虚拟机。

2014年,当我第一次接触Docker的时候,我把它比做一种轻量级的虚拟机。这样做无可厚非,因为Docker最初的成功秘诀,正是它比虚拟机更节省内存,启动更快。Docker不停地给大家宣传,”虚拟机需要数分钟启动,而Docker容器只需要50毫秒”。

然而,Docker容器并非虚拟机,我们不妨来比较一下它们。

理解虚拟机

使用虚拟机运行多个相互隔离的应用时,如下图:

图0:[外文翻译]虚拟机与Docker有何不同?
从下到上理解上图:

基础设施(Infrastructure)。它可以是你的个人电脑,数据中心的服务器,或者是云主机。
主操作系统(Host Operating System)。你的个人电脑之上,运行的可能是MacOS,Windows或者某个Linux发行版。
虚拟机管理系统(Hypervisor)。利用Hypervisor,可以在主操作系统之上运行多个不同的从操作系统。类型1的Hypervisor有支持MacOS的HyperKit,支持Windows的Hyper-V以及支持Linux的KVM。类型2的Hypervisor有VirtualBox和VMWare。
从操作系统(Guest Operating System)。假设你需要运行3个相互隔离的应用,则需要使用Hypervisor启动3个从操作系统,也就是3个虚拟机。这些虚拟机都非常大,也许有700MB,这就意味着它们将占用2.1GB的磁盘空间。更糟糕的是,它们还会消耗很多CPU和内存。
各种依赖。每一个从操作系统都需要安装许多依赖。如果你的的应用需要连接PostgreSQL的话,则需要安装libpq-dev;如果你使用Ruby的话,应该需要安装gems;如果使用其他编程语言,比如Python或者Node.js,都会需要安装对应的依赖库。
应用。安装依赖之后,就可以在各个从操作系统分别运行应用了,这样各个应用就是相互隔离的。
理解Docker容器

使用Docker容器运行多个相互隔离的应用时,如下图:

图1:[外文翻译]虚拟机与Docker有何不同?
不难发现,相比于虚拟机,Docker要简洁很多。因为我们不需要运行一个臃肿的从操作系统了。

从下到上理解上图:

基础设施(Infrastructure)。
主操作系统(Host Operating System)。所有主流的Linux发行版都可以运行Docker。对于MacOS和Windows,也有一些办法”运行”Docker。
Docker守护进程(Docker Daemon)。Docker守护进程取代了Hypervisor,它是运行在操作系统之上的后台进程,负责管理Docker容器。
各种依赖。对于Docker,应用的所有依赖都打包在Docker镜像中,Docker容器是基于Docker镜像创建的。
应用。应用的源代码与它的依赖都打包在Docker镜像中,不同的应用需要不同的Docker镜像。不同的应用运行在不同的Docker容器中,它们是相互隔离的。
对比虚拟机与Docker

Docker守护进程可以直接与主操作系统进行通信,为各个Docker容器分配资源;它还可以将容器与主操作系统隔离,并将各个容器互相隔离。虚拟机启动需要数分钟,而Docker容器可以在数毫秒内启动。由于没有臃肿的从操作系统,Docker可以节省大量的磁盘空间以及其他系统资源。

说了这么多Docker的优势,大家也没有必要完全否定虚拟机技术,因为两者有不同的使用场景。虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。而Docker通常用于隔离不同的应用,例如前端,后端以及数据库。

如果你对Docker感兴趣的话,不妨学习一下Dive Into Docker course。

部署在tomcat,打开文章详情报错

部署在tomcat,打开文章详情报错。看了下是因为url路径不对,部署在tomcat后,页面跳转应该是/myblog/article/{id}。但是打开文章详情是的url还是/article/{id}。查了下在properties文件中,加入server.context-path可以解决。但是打开后台,登录时还是报错,也是url没有待/myblog。对spring不是很熟,查了很久没找到原因。所以想请教下,该怎样去修改的?

Tomcat 下启动保错,麻烦帮我看下这是什么问题呢

error creating bean with name 'authController': Failed to introspect bean class [com.my.blog.website.controller.admin.AuthController] for lookup method metadata: could not find class that it depends on; nested exception is java.lang.NoClassDefFoundError: org/apache/catalina/servlet4preview/http/HttpServletRequest

非 docker 环境下部署,首次打开页面非常慢

看了一下get 请求/ 耗时将近4分多钟,传输6.74kb数据,这个是正常吗?只是首次打开时出现这种情况,当界面加载正常后,再打开就很快了。代码还没来得及看,不知道首次打开时做了什么操作这么耗时。不知道大家有遇到这种情况没?

运行http://localhost:8080/报404

INFO com.my.blog.website.interceptor.BaseInterceptor - UserAgent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.108 Safari/537.36 2345Explorer/8.8.3.16721
2018-03-15 21:31:27.090 [http-nio-8080-exec-3] INFO com.my.blog.website.interceptor.BaseInterceptor - 用户访问地址: /error, 来路地址: 0:0:0:0:0:0:0:1
2018-03-15 21:31:27.092 [http-nio-8080-exec-3] DEBUG org.mybatis.spring.SqlSessionUtils - Creating a new SqlSession
2018-03-15 21:31:27.092 [http-nio-8080-exec-3] DEBUG org.mybatis.spring.SqlSessionUtils - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d3662bc] was not registered for synchronization because synchronization is not active
2018-03-15 21:31:27.093 [http-nio-8080-exec-3] DEBUG org.mybatis.spring.transaction.SpringManagedTransaction - JDBC Connection [com.mysql.jdbc.JDBC4Connection@71a3453d] will not be managed by Spring
2018-03-15 21:31:27.093 [http-nio-8080-exec-3] DEBUG com.my.blog.website.dao.OptionVoMapper.selectByPrimaryKey - ==> Preparing: select name, value, description from t_options where name = ?
2018-03-15 21:31:27.093 [http-nio-8080-exec-3] DEBUG com.my.blog.website.dao.OptionVoMapper.selectByPrimaryKey - ==> Parameters: site_record(String)
2018-03-15 21:31:27.095 [http-nio-8080-exec-3] DEBUG com.my.blog.website.dao.OptionVoMapper.selectByPrimaryKey - <== Total: 1
2018-03-15 21:31:27.095 [http-nio-8080-exec-3] DEBUG org.mybatis.spring.SqlSessionUtils - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1d3662bc]

你好,在你的代码中有地方我觉得有问题

在PageController的publish方法上,你设置了对TipException异常回滚,但是却在方法中将该异常捕获了,这样会造成所有这类异常出现时事务都不会回滚,是矛盾的,但是如果不捕获,抛出异常又会导致请求无法返回....

docker 部署的时候遇到问题

docker 部署的时候遇到问题
[root@iZuf60o71ndcv5bgniyu4mZ docker-extension]# chmod +x run.sh
[root@iZuf60o71ndcv5bgniyu4mZ docker-extension]# sh -x run.sh

  • $'\r'
    run.sh: line 2: $'\r': command not found
  • set $'-e\r'
    : invalid optionset: -
    set: usage: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.