化石原创文章,转载请注明来源并保留原文链接


mac上可以使用HomeBrew安装Redis,如果长时间不用brew安装东西了。可以先使用下面的命令更新一下HomeBrew。

brew update
brew upgrade

安装Redis

使用命令:

brew install redis

启动Redis

brew services start redis

测试安装成功(进入命令行):

redis-cli
会看到输出(不同运行方式可能ip、端口不同):
127.0.0.1:6379 > 

这时输入PING,会看到结果PONG。像这样:
127.0.0.1:6379 > PING
PONG

停止Redis

brew services stop redis

配置

redis的配置文件在 /usr/local/etc/redis.conf

卸载

brew uninstall redis

rm ~/Library/LaunchAgents/homebrew.mxcl.redis.plist


化石原创文章,转载请注明来源并保留原文链接



化石原创文章,转载请注明来源并保留原文链接


1、下载最新版的tomcat 9

通过浏览器得到最新版本的详细地址(因apache会删除一些版本,所以如果按照网上的一些文章的地址,可能会访问错误)

a、浏览器地址栏输入http://www-us.apache.org/dist/tomcat/tomcat-9

b、在该网页上看到列出的最新版本,一般是一个以版本号为名字的文件夹

c、进入该文件夹,再进入列出的bin文件夹

d、找到tar.gz结尾的那个文件,然后根据上面的信息,组织出要下载的文件的路径,比如http://www-us.apache.org/dist/tomcat/tomcat-9/v9.0.30/bin/apache-tomcat-9.0.30.tar.gz

e、下载,命令

wget http://www-us.apache.org/dist/tomcat/tomcat-9/v9.0.30/bin/apache-tomcat-9.0.30.tar.gz

2、把下载的压缩文件移到/usr/local/ (我的习惯,这里是手动绿色软件的存放处)

mv apache-tomcat-9.0.30.tar.gz /usr/local

3、解压缩,得到绿色版tomcat 9

tar -xvf apache-tomcat-9.0.20.tar.gz

到这里,tomcat 9算是安装好了。下面是配置

4、配置CATALINA_HOME

echo "export CATALINA_HOME="/usr/local/apache-tomcat-9.0.30"" >> ~/.bashrc
source ~/.bashrc

这样我们就配置好了,注意上面的apache-tomcat-9.0.30是自己的解压缩后的绿色软件的根目录(文件夹)名字,需要根据实际改变。而CATALINA_HOME是后面我们启动tomcat 9,tomcat 9会寻找的一个环境变量。

5、启动

进入绿色安装包的bin,按我们前面的路径,应该是

/usr/local/apache-tomcat-9.0.30/bin

使用命令:

sudo ./startup.sh

6、测试

通过远程机器,访问CentOS所在服务器的8080端口,应该能看到tomcat 9的默认主页。

后续:

1、上面的启动对应的关闭,是同文件夹下的shutdown.sh脚本。

2、关于logs,在CentOS(Mac同)上,可以通过service方式启动tomcat,但是在安装目录下,logs文件夹中不会产生catalina.out文件。这个文件会存放详细的log信息,是最重要的一个log文件。

要产生这个文件,必须使用上面的startup.sh脚本。


化石原创文章,转载请注明来源并保留原文链接



化石原创文章,转载请注明来源并保留原文链接


1、安装tomcat (空壳)

sudo yum install tomcat

2、安装默认的web app

sudo yum install tomcat-webapps tomcat-admin-webapps

到这一步,我们就可以访问默认的网站了(默认端口是8080),当然,必须先启动tomcat,运行命令:

sudo systemctl start tomcat

如果要让tomcat成为一个service,使用下面的命令:

sudo systemctl enable tomcat

注意:
如果是阿里云,需要在后台云服务器对应的安全规则中加入对8080端口的配置

3、想使用tomcat的图形后台,必须加一个user到配置

sudo vi /usr/share/tomcat/conf/tomcat-users.xml

加入

<tomcat-users>
    <user username="admin" password="password" roles="manager-gui, admin-gui"/>
</tomcat-users>

化石原创文章,转载请注明来源并保留原文链接



化石原创文章,转载请注明来源并保留原文链接


背景

一个Intellij,mavn工程。

1、使用了local的jar作为lib

2、使用main()方法作为入口方法

3、使用ftl文件作为模板(FreeMarker)

在使用Intellij开发的时候,没有任何问题。现在要发布到外部机器,希望用户能通过web默认端口80访问。

需要的步骤

1、通过Intellij的maven工具,package命令打包成war文件或者是war同等的文件夹

可能会遇到的问题:

因为使用local的jar,而不是maven reposity的,而local jar是通过File|Project Structure… |Library添加,所以package命令不能成功,遇上这个jar找不到问题。

解决方案:

在项目的pom.xml中,加入使用<systemPath>的<dependency>项,告知maven工具local的jar路径

注意:

如果项目非有springboot initializer生成,那么还需要在pom.xml中加入

<!--  手工设置:让打包成war的设置  -->
<packaging>war</packaging>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

一个完整的的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>org.example</groupId>
    <artifactId>wlxsphb</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--  手工设置:让打包成war的设置  -->
    <packaging>war</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver</artifactId>
            <version>3.11.2</version>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20190722</version>
        </dependency>
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.10.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>28.1-jre</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.sun.mail/javax.mail -->
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>it.sauronsoftware</groupId>
            <artifactId>base64</artifactId>
            <version>1.3.1</version>
            <scope>system</scope>
            <systemPath>C:/Users/HanIT/.m2/repository/it/sauronsoftware/base64/javabase64-1.3.1.jar</systemPath>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

2、在main()中,有初始化的代码,会在springboot模块前后初始化自己的类

可能会遇到的问题:

发布到外部tomcat,这个main就不会被主动运行。tomcat会由spring boot去寻找SpringBootServletInitializer继承类的configure()方法运行(代替这个main)。所以,所有的初始化没有机会,就导致后续的各种错误,而导致服务无法正常,最常见的就是各种NullException的发生。

解决方案:

1、在Override的configure()中,拷贝对应的初始化方法。视confiure()为入口方法。

有了上面两个大前提,把一个这样的web application放置到外部tomcat的步骤就是:

1、删空tomcat webapps下的ROOT文件夹下所有默认文件(这个方式让web application的根目录替代默认的网站根目录)

2、使用maven的package,打包出target下的war,同时会有同名目录放在war旁

3、拷贝这个同名目录到ROOT下,spring boot工程会出两个文件夹,一个为WEB-INF,另外一个为META-INF。WEB-INF中,含两个目录:classes和lib。classes包含的是Intellij项目中java(src目录)下的java代码产生的class(按原目录组织)文件和resources下所有文件(文件夹);lib下是项目中用到的maven引用的其他jar。META-INF文件夹可能是空的。

查错

发布到外部的tomcat,启动服务后,看不到自己的网站页面,或者看页面时见到错误。查错的方式是看tomcat的日志:在tomcat安装目录下,有logs文件夹,启动服务后会出现很多的log文件,主要是stderr字眼的文件和stdout字眼的文件。严重的错误,比如spring boot前就发生的错误,比如configure()方法就发生了导致springboot不能继续的错误,在stderr中能看到。而后续的各种mapping错误,信息等,都可以在stdout中看到。

常见的System.out.println()发出的信息,在这些文件里都会存在。

修改默认的8080端口

打开tomcat安装目录下的conf文件夹下的server.xml,查找8080字眼,应该能看到未注释的如下字眼:

<Connector port="8080" protocol="HTTP/1.1"            connectionTimeout="20000"            redirectPort="8443" />

改动其中的8080到80,保存。然后重启tomcat即可。


化石原创文章,转载请注明来源并保留原文链接



化石原创文章,转载请注明来源并保留原文链接


不是所有的库在maven repository都可以找到,所以很多时候我们还是得从第三方网站下载到jar,然后放置到本地。如果是Maven对应的项目,如果不使用maven方式,平时在intellij中调式可能不出问题,但在使用maven的build、compile等等命令的时候,就会发生错误。

这里就需要把本地文件添加到maven的pom.xml中。

下面是一个pom使用本地文件的写法例子:

<dependency>
    <groupId>it.sauronsoftware</groupId>
    <artifactId>base64</artifactId>
    <version>1.3.1</version>
    <scope>system</scope>
    <systemPath>C:/Users/HanIT/.m2/repository/it/sauronsoftware/base64/javabase64-1.3.1.jar</systemPath>
</dependency>

这里重要的是<scope>使用了system,然后用了<systemPath>元素告知本地jar路径。其他的地方都是名字,对应着填即可。


化石原创文章,转载请注明来源并保留原文链接