title: ssm框架问题汇总
date: 2018-03-21 16:49:52
updated: 2020-03-09 18:20:44
categories: spring
tags:
- spring
此文档为maven组建ssm框架的问题汇总
Mysql ERROR 1067: Invalid default value for 字段
问题:编码问题导致jdbc查询数据库查询不到值。
解决:在jdbc的数据库连接地址后面加
?useUnicode=true&characterEncoding=UTF-8,否则查询不到,编码问题。
Class.forName("com.mysql.jdbc.Driver");
//下面一定要再jdbc的数据库连接地址后面加?useUnicode=true&characterEncoding=UTF-8,否则查询不到,编码问题
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/micro_message?useUnicode=true&characterEncoding=UTF-8", "root", "123456");
目前找到的最好的方法:
一、重命名一个项目
在Idea 项目关闭状态下,在Finder里重命名文件夹,并删除.idea 文件夹下的 workspace.xml (此文件不删的话有些项目配置会有问题)。
Idea 菜单 File - Open… 打开重命名后的项目,在Project Structure中设置如下:
如果是Web 项目,需要重命名模块module name;
重命名项目名Project Name(这个不改也没什么影响);
在artifact中删掉错的,再添加正确的artifact,见下图;
大功告成,配置Tomcat即可。
复制之前可先删除target 文件夹,里面是项目编译后的文件(每次启动Tomcat 都会生成),其中的jar 包体积较大。
在Finder直接复制整个项目文件夹,可直接粘贴在同一个项目目录,修改项目文件夹名称即可;当然也可复制到另一个项目目录。
删除.idea 文件夹下的 workspace.xml (此文件不删的话有些项目配置会有问题)。
(与上面重命名项目的第2步完全一样) 菜单 File - Open… 打开复制出来的项目文件夹(图同上),如果是Web 项目,需要重命名模块,操作是在项目名上shift+F6 (Rename Module);菜单File - Project Structure - Project Name, 重命名项目(但不改好象也没什么影响),图同上;并在 Project Structure 查看 artifact,删掉错的,再添加正确的artifact,图同上;然后再配置Tomcat 即可。
如果Idea 工作空间文件夹含空格,可能导致某些程序错误,比如用this.getClass().getResource("/").getPath() 得到的路径,空格会被自动转换成"20%",再使用这个路径就找不到了。所以可以将整个Idea 工作空间重命名,然后直接打开里面的项目的话,Maven 报错无法载入,这个还是workspace.xml 的问题,所以要把整个Idea 工作空间内的workspace.xml 都删了,再打开项目。
问题:在eclipse中,把资源文件放在src文件夹下,是可以找到的;
但是在idea中,直接把资源文件放在src文件夹下,如果不进行设置,是不能被找到的。例如使用Mybatis,mapper文件都是放在包路径下,和实体一个层级,使用IDEA时就会报错
解决:配置maven的pom文件配置,在pom文件中找到节点,添加下列代码:
<build>
<resources>
<resource>
<directory>src/main/javadirectory>
<includes>
<include>**/*.xmlinclude>
includes>
resource>
resources>
build>
*/.xml是通配符,匹配src/main/java目录下所有的xml文件,将其映射为资源文件,这样,IDEA就会加载该xml文件。
问题:No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).
如果不是web项目,有main函数的那种,则:
1、在main函数中加入BasicConfigurator.configure();
2、把log4j.properties放在src目录下,这样才能被找到
如果是有web的那种正常项目,一下两步解决:
1、将写好的log4j.properties放在WEB-INF目录下(如/WEB-INF/class/log4j.properties)
2、在web.xml中加入下面的配置:
<context-param>
<param-name>log4jConfigLocationparam-name>
<param-value>/WEB-INF/class/log4j.propertiesparam-value>
context-param>
<listener>
<listener-class>
org.springframework.web.util.Log4jConfigListener
listener-class>
listener>
来自:Bootstrap 模态框(Modal)带参数传值实例,完美的解决了我的问题hiahia
模态框(Modal)是覆盖在父窗体上的子窗体。通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动。子窗体可提供信息、交互等。
为了实现父窗体与其的交互,通常需要向其传值,实现带参数的传递,查看数据的唯一性。例如下面窗体:点击任意一个模态框("回复"按钮),如果不做任何处理,则会出现回复混淆,甚至程序出错的情况。
实现的效果:
我的示例如下:
mac上终端操作:
第一步:使用lsof -i tcp:1099 查看时那个应用占用了1099端口(换成你想找的端口)
第二部:使用kill pid 即可,这里的pid是第一步所查询到结果
问题报错:Could not contact localhost:8005. Tomcat may not be running.
直接重装tomcat
来源 Bootstrap 字体图标(Glyphicons)
解决:引入cdn的bootstrap、jquery即可
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js">script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js">script>
问题:js中var killPhone = $.cookie("killPhone");
取不到值,原来是 $.cookie is not a function
就是说
解决:出现这种问题有3中可能
1是没有导入cookie相关的库文件
2是cookie的库文件和jquery库文件的先后顺序问题, 必须先导入jquery库文件后到其他库文件
3一个页面由于二次或多次引入了jquery插件导致。
我们问题原因是手残导入2次jquery库文件,orz。。。
//监听回车事件
document.onkeydown = function(e){
if(e.keyCode === 13){
$("#killPhoneButton").click();
}
};
用one绑定而不是click的好处就是:只绑定一次点击事件。防止一个用户不停的点秒杀,都发送服务端造成崩溃
$ ("#killBtn").one("click",function(){
});
解决:在jsp中的input属性中加入autofocus即可
<input type="text" name="killPhone" autofocus class="form-control" id="killPhoneKey" placeholder="填手机号"/>
命令sudo lsof -i tcp:port(port替换成端口号,比如6379)可以查看该端口被什么程序占用,并显示PID,方便KILL
e.g.
sudo lsof -i tcp:80
linux:sudo netstat -ltnp |grep xxx
mac:
sudo lsof -i -n -P | grep 45046 (所查询的进程pid是45046)
sudo lsof -i -n -P | grep memcached (所查询的进程名是memcached)
-i:列出符合条件的进程
-P 表示不显示端口俗称,直接显示端口号http->80
不加 sudo 只能查看以当前用户运行的程序,所以必须加
sudo php-fpm -D
4.mac终端执行php脚本
php test.php
php -r 'phpinfo();’即可
或者启动apache,在apache目录中建一个info.php页面
然后浏览器输入localhost/info.php即可
另外 php -m可以看到php相关扩展
php 5.3.3 以后的php-fpm 不再支持 php-fpm 以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令,所以不要再看这种老掉牙的命令了,需要使用信号控制:
master进程可以理解以下信号
INT, TERM 立刻终止
QUIT 平滑终止
USR1 重新打开日志文件
USR2 平滑重载所有worker进程并重新载入配置和二进制模块
1.启动php-fpm:
/usr/local/opt/[email protected]/sbin//php-fpm
2.重启、关闭
来源:php-fpm - 启动参数及重要配置详解
方法一:
先查看ps aux | grep php-fpm看master进程号,即root用户下的进程号
kill -USR2 pid即可
方法二:
上面方案一般是没有生成php-fpm.pid文件时使用,如果要生成php-fpm.pid,使用下面这种方案:
上面master进程可以看到,matster使用的是/usr/local/php/etc/php-fpm.conf这个配置文件,cat /usr/local/php/etc/php-fpm.conf 发现:
[global]
; Pid file
; Note: the default prefix is /usr/local/php/var
; Default Value: none
;pid = run/php-fpm.pid
pid文件路径应该位于/usr/local/var/run/php-fpm.pid,由于注释掉,所以没有生成,我们把注释去除,再kill -USR2 42891 重启php-fpm,便会生成pid文件,下次就可以使用以下命令重启,关闭php-fpm了:
php-fpm 关闭:
kill -INT 'cat /usr/local/var/run/php-fpm.pid'
php-fpm 重启:
kill -USR2 'cat /usr/local/var/run/php-fpm.pid'
daemon进程kill不掉不断重启的解决方法:
1./Library/LaunchDaemons/中删除[email protected]文件,这个是mac下的自启文件,删了就不会自启了
2.把www.conf中的www换成xxx都可以。原因是www.conf头部定义了新建一个线程池www,如果user/group也是www的话那就在www下正常运行,但是这样就没法在braincao下甚至root下kill进程了,因此需要把user/group设置为不是www的,这样启动php-fpm就会忽略user/group,也就不会在www下启动而是在briancao下启动,这样就能kill进程了
;user = www
;group = www
user = root (braincao或xxx都可以)
group = root (braincao或xxx都可以)
3.设置完后就可以正常的像启动、重启kill -usr2 pid、关闭kill -int pid了,注意pid是最小的那个pid。