SpringBoot 整合NoSql(實現過程案例分析)

通用配置

maven依賴

添加Spring-Web和Spring-Security依賴,使用Spring-Security是因為使用SpringBoot的Redis依賴時,必須添加Spring-Security。在新版本SpringBoot才會這樣。

<dependency>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-web/<artifactid>
/<dependency>
<dependency>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-security/<artifactid>
/<dependency>

properties配置

8080端口指定一下,因為下面雙開服務器這個配置必須在這裡顯示加上。

server.port=8080

測試類

@RestController
public class HelloController {

@Value("${server.port}")
Integer port;

@GetMapping("/set")
public String set(HttpSession session) {
session.setAttribute("name", "johnson");
return String.valueOf(port);
}

@GetMapping("/get")
public String get(HttpSession session) {
return (String)session.getAttribute("name") + port;
}
}

整合Redis

maven依賴

<dependency>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-data-redis/<artifactid>
/<dependency>

連接redis必須要密碼,否則連接不上,所以你的redis服務器必須設置密碼

spring.redis.host=127.0.0.1
spring.redis.database=0
spring.redis.port=6379
spring.redis.password=123456

啟動後,瀏覽器打開localhost:8080,賬號默認為user,密碼在控制檯打印出來了,可以去看看。頁面如下:

SpringBoot 整合NoSql(實現過程案例分析)

Redis下的Session共享

當我們開啟兩個或多個Tomcat時,如何在這兩個Tomcat服務中共享Session呢,而Spring直接扔個依賴給你,安裝這個依賴就好了。
???????????? execute me!?
就是這麼簡單,添加spring-session-data-redis依賴就好了,如下:

<dependency>
<groupid>org.springframework.session/<groupid>
<artifactid>spring-session-data-redis/<artifactid>
/<dependency>

測試Session共享

使用maven使用package指令打包出來出來後(IDEA的Maven工具有package按鈕,點一下就好),在target目錄下可以看到你打包好的jar包,就像這樣:

SpringBoot 整合NoSql(實現過程案例分析)

進入到tartget目錄後,打開兩個命令窗口, 分別輸入以下命令:

java -jar sessionhare-0.0.1-SNAPSHOT.jar --server.port=8080 //窗口1命令
java -jar sessionhare-0.0.1-SNAPSHOT.jar --server.port=8081 //窗口2命令

然後打開頁面localhost:8080,賬號默認為user,密碼可以在8080的控制檯看到,登錄成功後,
再打開頁面localhost:8081,你會發現不需要再次登錄啦,Session共享成功!

Nginx的負載均衡

安裝Nginx可以參考我之前的文章 Centos安裝Nginx
如果是Ubuntu或者其他類型的系統,就依賴項不同,安裝方式還是一樣的。

nginx配置

nginx配置在路徑在/usr/local/nginx/conf/nginx.conf, 修改配置如下:
在http模塊下修改。

 upstream colablog.cn {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=1;
}
server {
listen 80;
server_name localhost;

location / {
proxy_pass http://colablog.cn;
proxy_redirect default;

}
}

修改完nginx配置後記得要重新加載一下配置文件,修改配置文件後必須重新指定配置文件,否則啟動會報錯。

sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf //重新指定配置文件
sudo /usr/local/nginx/sbin/nginx -s reload //重新啟動nginx

把剛才項目打包出來的jar包扔到Linux服務器上,讓程序在服務器後臺運行,使用如下命令:

$ nohup java -jar sessionhare-0.0.1-SNAPSHOT.jar --server.port=8080 > 8080.log &
$ nohup java -jar sessionhare-0.0.1-SNAPSHOT.jar --server.port=8081 > 8081.log &

打開你Linux服務器的ip地址就可以看到了。在瀏覽器打開你的虛擬機ip/set,你的虛擬機ip/get,重複打開幾次就會發現訪問不同的端口。

MongoDb

整合MongoDb就像整合Redis那麼簡單,依賴和配置文件搞一下就行了

maven依賴

<dependency>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-data-mongodb/<artifactid>
/<dependency>

properties配置

spring.data.mongodb.host=127.0.0.1 

spring.data.mongodb.authentication-database=admin
spring.data.mongodb.username=johnson
spring.data.mongodb.password=123456
spring.data.mongodb.port=27017
spring.data.mongodb.database=johnson

這樣就已經配置好了,不過我們還是測試一下吧。

測試

Book實體類

public class Book {

private Integer id;

private String name;

private String author;

@Override
public String toString() {
return "Book{" +
"id=" + id +
", name='" + name + '\\'' +
", author='" + author + '\\'' +
'}';
}

public Integer getId() { return id; }

public void setId(Integer id) { this.id = id; }

public String getName() { return name; }

public void setName(String name) { this.name = name; }

public String getAuthor() { return author; }

public void setAuthor(String author) { this.author = author; }
}

dao接口

public interface BookDao extends MongoRepository<book> {
List<book> findBookByNameContaining(String name);

}
/<book>/<book>

測試類

@SpringBootTest
class MongoApplicationTests {
@Autowired
BookDao dao;

@Test
void contextLoads() {
Book book = new Book();
book.setName("colablog");
book.setId(1);
book.setAuthor("johnson");
dao.insert(book);
}

@Test
public void getList() {
List<book> all = dao.findAll();
System.out.println(all);
List<book> cola = dao.findBookByNameContaining("cola");
System.out.println(cola);
}

@Autowired
MongoTemplate template;

@Test
public void test1() {
Book book = new Book();
book.setName("colablog2");
book.setId(2);
book.setAuthor("johnson2");
template.insert(book);

List<book> all = template.findAll(Book.class);
System.out.println(all);
}
}/<book>/<book>/<book>

總結

文章代碼貼的有點多,因為測試用例的關係,真是抱歉,因為有測試用例才能證明程序能走通。


好了,感謝各位的閱讀,文章若有不足之處或更好的建議,歡迎在下方留言討論。


分享到:


相關文章: