commit
4b7ab82017
@ -0,0 +1,40 @@ |
|||||||
|
# Startup Configuration Guide |
||||||
|
|
||||||
|
Libresonic has some system-wide configuration. These configurations are stored in the |
||||||
|
`libresonic.properties` file. There is one exception, which is the `libresonic.home` parameter which |
||||||
|
is supplied as a Java System Property. |
||||||
|
|
||||||
|
## `libresonic.properties` |
||||||
|
These parameters are simple key-value pairs stored in a list. It is recommended that these parameters |
||||||
|
are changed through the web interface settings page. However, they can also be modified directly. Shutdown |
||||||
|
your server first, modify, then start it for changes to take effect. |
||||||
|
|
||||||
|
## Java Parameters |
||||||
|
The `libresonic.home` parameter is a Java System Property that is not modifiable through the web interface. |
||||||
|
It must be configured via Java startup parameters. See below for steps to do this. |
||||||
|
|
||||||
|
#### `libresonic.home` |
||||||
|
This parameter dictates the folder where Libresonic will store its logs, |
||||||
|
settings, transcode binaries, index and database if using the default H2 |
||||||
|
database. As such it is recommended to backup this folder. |
||||||
|
|
||||||
|
*default: `/var/libresonic` or `C:\\music`* |
||||||
|
|
||||||
|
#### Setting Java Parameters on Tomcat |
||||||
|
As described in the [RUNNING.txt](http://tomcat.apache.org/tomcat-8.0-doc/RUNNING.txt) doc provided by tomcat, |
||||||
|
you can create a file named `setenv.sh` or for windows `setenv.bat` in the Tomcat home `bin` folder to modify the |
||||||
|
java args. |
||||||
|
|
||||||
|
Here is an example of a `setenv.sh` file (`setenv.bat` has slightly different syntax): |
||||||
|
``` |
||||||
|
export JAVA_OPTS="$JAVA_OPTS -Dlibresonic.home=/home/andrew/.cache/libresonic-test" |
||||||
|
``` |
||||||
|
|
||||||
|
#### Setting Java Parameters for Standalone Package (SpringBoot) |
||||||
|
When running the standalone package, add `-Dlibresonic.home=YOUR_PATH_HERE` to the `java` command line right before the |
||||||
|
`-jar` argument. Here is an example for linux (windows users will want to use their OS specific path syntax i.e. |
||||||
|
`C:\\your\path`) |
||||||
|
|
||||||
|
``` |
||||||
|
java -Dlibresonic.home=/home/andrew/libresonichome -jar libresonic.war |
||||||
|
``` |
@ -0,0 +1,82 @@ |
|||||||
|
package org.libresonic.player.command; |
||||||
|
|
||||||
|
import org.libresonic.player.spring.DataSourceConfigType; |
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull; |
||||||
|
|
||||||
|
public class DatabaseSettingsCommand { |
||||||
|
|
||||||
|
@NotNull |
||||||
|
private DataSourceConfigType configType; |
||||||
|
private String embedDriver; |
||||||
|
private String embedPassword; |
||||||
|
private String embedUrl; |
||||||
|
private String embedUsername; |
||||||
|
private String JNDIName; |
||||||
|
private int mysqlVarcharMaxlength; |
||||||
|
private String usertableQuote; |
||||||
|
|
||||||
|
public DataSourceConfigType getConfigType() { |
||||||
|
return configType; |
||||||
|
} |
||||||
|
|
||||||
|
public void setConfigType(DataSourceConfigType configType) { |
||||||
|
this.configType = configType; |
||||||
|
} |
||||||
|
|
||||||
|
public String getEmbedDriver() { |
||||||
|
return embedDriver; |
||||||
|
} |
||||||
|
|
||||||
|
public void setEmbedDriver(String embedDriver) { |
||||||
|
this.embedDriver = embedDriver; |
||||||
|
} |
||||||
|
|
||||||
|
public String getEmbedPassword() { |
||||||
|
return embedPassword; |
||||||
|
} |
||||||
|
|
||||||
|
public void setEmbedPassword(String embedPassword) { |
||||||
|
this.embedPassword = embedPassword; |
||||||
|
} |
||||||
|
|
||||||
|
public String getEmbedUrl() { |
||||||
|
return embedUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public void setEmbedUrl(String embedUrl) { |
||||||
|
this.embedUrl = embedUrl; |
||||||
|
} |
||||||
|
|
||||||
|
public String getEmbedUsername() { |
||||||
|
return embedUsername; |
||||||
|
} |
||||||
|
|
||||||
|
public void setEmbedUsername(String embedUsername) { |
||||||
|
this.embedUsername = embedUsername; |
||||||
|
} |
||||||
|
|
||||||
|
public String getJNDIName() { |
||||||
|
return JNDIName; |
||||||
|
} |
||||||
|
|
||||||
|
public void setJNDIName(String JNDIName) { |
||||||
|
this.JNDIName = JNDIName; |
||||||
|
} |
||||||
|
|
||||||
|
public int getMysqlVarcharMaxlength() { |
||||||
|
return mysqlVarcharMaxlength; |
||||||
|
} |
||||||
|
|
||||||
|
public void setMysqlVarcharMaxlength(int mysqlVarcharMaxlength) { |
||||||
|
this.mysqlVarcharMaxlength = mysqlVarcharMaxlength; |
||||||
|
} |
||||||
|
|
||||||
|
public String getUsertableQuote() { |
||||||
|
return usertableQuote; |
||||||
|
} |
||||||
|
|
||||||
|
public void setUsertableQuote(String usertableQuote) { |
||||||
|
this.usertableQuote = usertableQuote; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,106 @@ |
|||||||
|
/* |
||||||
|
This file is part of Libresonic. |
||||||
|
|
||||||
|
Libresonic is free software: you can redistribute it and/or modify |
||||||
|
it under the terms of the GNU General Public License as published by |
||||||
|
the Free Software Foundation, either version 3 of the License, or |
||||||
|
(at your option) any later version. |
||||||
|
|
||||||
|
Libresonic is distributed in the hope that it will be useful, |
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
GNU General Public License for more details. |
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License |
||||||
|
along with Libresonic. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Copyright 2016 (C) Libresonic Authors |
||||||
|
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus |
||||||
|
*/ |
||||||
|
package org.libresonic.player.controller; |
||||||
|
|
||||||
|
import org.libresonic.player.command.DatabaseSettingsCommand; |
||||||
|
import org.libresonic.player.dao.AlbumDao; |
||||||
|
import org.libresonic.player.dao.ArtistDao; |
||||||
|
import org.libresonic.player.dao.MediaFileDao; |
||||||
|
import org.libresonic.player.service.MediaScannerService; |
||||||
|
import org.libresonic.player.service.SettingsService; |
||||||
|
import org.libresonic.player.spring.DataSourceConfigType; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.stereotype.Controller; |
||||||
|
import org.springframework.ui.Model; |
||||||
|
import org.springframework.validation.BindingResult; |
||||||
|
import org.springframework.validation.annotation.Validated; |
||||||
|
import org.springframework.web.bind.annotation.ModelAttribute; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import org.springframework.web.servlet.mvc.support.RedirectAttributes; |
||||||
|
|
||||||
|
@Controller |
||||||
|
@RequestMapping("/databaseSettings") |
||||||
|
public class DatabaseSettingsController { |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private SettingsService settingsService; |
||||||
|
@Autowired |
||||||
|
private MediaScannerService mediaScannerService; |
||||||
|
@Autowired |
||||||
|
private ArtistDao artistDao; |
||||||
|
@Autowired |
||||||
|
private AlbumDao albumDao; |
||||||
|
@Autowired |
||||||
|
private MediaFileDao mediaFileDao; |
||||||
|
|
||||||
|
@RequestMapping(method = RequestMethod.GET) |
||||||
|
protected String displayForm() throws Exception { |
||||||
|
return "databaseSettings"; |
||||||
|
} |
||||||
|
|
||||||
|
@ModelAttribute |
||||||
|
protected void formBackingObject(Model model) throws Exception { |
||||||
|
DatabaseSettingsCommand command = new DatabaseSettingsCommand(); |
||||||
|
command.setConfigType(settingsService.getDatabaseConfigType()); |
||||||
|
command.setEmbedDriver(settingsService.getDatabaseConfigEmbedDriver()); |
||||||
|
command.setEmbedPassword(settingsService.getDatabaseConfigEmbedPassword()); |
||||||
|
command.setEmbedUrl(settingsService.getDatabaseConfigEmbedUrl()); |
||||||
|
command.setEmbedUsername(settingsService.getDatabaseConfigEmbedUsername()); |
||||||
|
command.setJNDIName(settingsService.getDatabaseConfigJNDIName()); |
||||||
|
command.setMysqlVarcharMaxlength(settingsService.getDatabaseMysqlVarcharMaxlength()); |
||||||
|
command.setUsertableQuote(settingsService.getDatabaseUsertableQuote()); |
||||||
|
model.addAttribute("command", command); |
||||||
|
} |
||||||
|
|
||||||
|
@RequestMapping(method = RequestMethod.POST) |
||||||
|
protected String onSubmit(@ModelAttribute("command") @Validated DatabaseSettingsCommand command, |
||||||
|
BindingResult bindingResult, |
||||||
|
RedirectAttributes redirectAttributes) throws Exception { |
||||||
|
if (!bindingResult.hasErrors()) { |
||||||
|
settingsService.resetDatabaseToDefault(); |
||||||
|
settingsService.setDatabaseConfigType(command.getConfigType()); |
||||||
|
switch(command.getConfigType()) { |
||||||
|
case EMBED: |
||||||
|
settingsService.setDatabaseConfigEmbedDriver(command.getEmbedDriver()); |
||||||
|
settingsService.setDatabaseConfigEmbedPassword(command.getEmbedPassword()); |
||||||
|
settingsService.setDatabaseConfigEmbedUrl(command.getEmbedUrl()); |
||||||
|
settingsService.setDatabaseConfigEmbedUsername(command.getEmbedUsername()); |
||||||
|
break; |
||||||
|
case JNDI: |
||||||
|
settingsService.setDatabaseConfigJNDIName(command.getJNDIName()); |
||||||
|
break; |
||||||
|
case LEGACY: |
||||||
|
default: |
||||||
|
break; |
||||||
|
} |
||||||
|
if(command.getConfigType() != DataSourceConfigType.LEGACY) { |
||||||
|
settingsService.setDatabaseMysqlVarcharMaxlength(command.getMysqlVarcharMaxlength()); |
||||||
|
settingsService.setDatabaseUsertableQuote(command.getUsertableQuote()); |
||||||
|
} |
||||||
|
redirectAttributes.addFlashAttribute("settings_toast", true); |
||||||
|
settingsService.save(); |
||||||
|
return "redirect:databaseSettings.view"; |
||||||
|
} else { |
||||||
|
return "databaseSettings.view"; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,128 @@ |
|||||||
|
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="iso-8859-1" %> |
||||||
|
<%--@elvariable id="command" type="org.libresonic.player.command.DatabaseSettingsCommand"--%> |
||||||
|
|
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<%@ include file="head.jsp" %> |
||||||
|
<%@ include file="jquery.jsp" %> |
||||||
|
<script> |
||||||
|
function updateShownOptions() { |
||||||
|
$(".hideawayDatabaseOptions").hide(); |
||||||
|
var value = $('select#configType').val(); |
||||||
|
var objToShow = $("#" + value + "DatabaseOptions"); |
||||||
|
if (objToShow.length) { |
||||||
|
objToShow.show(); |
||||||
|
} |
||||||
|
if(value != 'LEGACY') { |
||||||
|
$("#nonLEGACYDatabaseOptions").show(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
$(document).ready(function () { |
||||||
|
updateShownOptions(); |
||||||
|
$('select#configType').on('change', function () { |
||||||
|
updateShownOptions(); |
||||||
|
}); |
||||||
|
}); |
||||||
|
</script> |
||||||
|
</head> |
||||||
|
<body class="mainframe bgcolor1"> |
||||||
|
<script type="text/javascript" src="<c:url value="/script/wz_tooltip.js"/>"></script> |
||||||
|
<script type="text/javascript" src="<c:url value="/script/tip_balloon.js"/>"></script> |
||||||
|
|
||||||
|
<c:import url="settingsHeader.jsp"> |
||||||
|
<c:param name="cat" value="database"/> |
||||||
|
<c:param name="toast" value="${settings_toast}"/> |
||||||
|
</c:import> |
||||||
|
|
||||||
|
<form:form commandName="command" action="databaseSettings.view" method="post"> |
||||||
|
<p><fmt:message key="databasesettings.moreinfo"/></p> |
||||||
|
|
||||||
|
<table style="white-space:nowrap" class="indent"> |
||||||
|
<tr> |
||||||
|
<td><fmt:message key="databasesettings.configtype"/></td> |
||||||
|
<td> |
||||||
|
<form:select path="configType" cssStyle="width:12em" id="configType"> |
||||||
|
<form:option value="LEGACY" label="Legacy"/> |
||||||
|
<form:option value="EMBED" label="Embedded JDBC"/> |
||||||
|
<form:option value="JNDI" label="JNDI"/> |
||||||
|
</form:select> |
||||||
|
<c:import url="helpToolTip.jsp"><c:param name="topic" value="databaseConfigType"/></c:import> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
|
||||||
|
<div id="EMBEDDatabaseOptions" class="hideawayDatabaseOptions"> |
||||||
|
<table style="white-space:nowrap;" class="indent"> |
||||||
|
<table style="white-space:nowrap;" class="indent"> |
||||||
|
<tr> |
||||||
|
<td><fmt:message key="databasesettings.embeddriver"/></td> |
||||||
|
<td> |
||||||
|
<form:input path="embedDriver" size="30"/> |
||||||
|
<c:import url="helpToolTip.jsp"><c:param name="topic" value="embeddriver"/></c:import> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
<tr> |
||||||
|
<td><fmt:message key="databasesettings.embedurl"/></td> |
||||||
|
<td> |
||||||
|
<form:input path="embedUrl" size="58"/> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
<tr> |
||||||
|
<td><fmt:message key="databasesettings.embedusername"/></td> |
||||||
|
<td> |
||||||
|
<form:input path="embedUsername" size="36"/> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
<tr> |
||||||
|
<td><fmt:message key="databasesettings.embedpassword"/></td> |
||||||
|
<td> |
||||||
|
<form:input path="embedPassword" size="36"/> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div id="JNDIDatabaseOptions" class="hideawayDatabaseOptions"> |
||||||
|
<table style="white-space:nowrap;" class="indent"> |
||||||
|
<tr> |
||||||
|
<td><fmt:message key="databasesettings.jndiname"/></td> |
||||||
|
<td> |
||||||
|
<form:input path="JNDIName" size="36"/> |
||||||
|
<c:import url="helpToolTip.jsp"><c:param name="topic" value="jndiname"/></c:import> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
<div id="nonLEGACYDatabaseOptions" class="hideawayDatabaseOptions"> |
||||||
|
<table style="white-space:nowrap" class="indent"> |
||||||
|
<tr> |
||||||
|
<td><fmt:message key="databasesettings.mysqlvarcharmaxlength"/></td> |
||||||
|
<td> |
||||||
|
<form:input path="mysqlVarcharMaxlength" size="8"/> |
||||||
|
<c:import url="helpToolTip.jsp"><c:param name="topic" value="mysqlvarcharmaxlength"/></c:import> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
<tr> |
||||||
|
<td><fmt:message key="databasesettings.usertablequote"/></td> |
||||||
|
<td> |
||||||
|
<form:input path="usertableQuote" size="1" htmlEscape="true"/> |
||||||
|
<c:import url="helpToolTip.jsp"><c:param name="topic" value="usertablequote"/></c:import> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
<p class="warning"><fmt:message key="databasesettings.jdbclibrary"/></p> |
||||||
|
</div> |
||||||
|
|
||||||
|
<p class="warning"><fmt:message key="databasettings.restartRequired"/></p> |
||||||
|
|
||||||
|
<p> |
||||||
|
<input type="submit" value="<fmt:message key="common.save"/>" style="margin-right:0.3em"> |
||||||
|
<input type="button" value="<fmt:message key="common.cancel"/>" onclick="location.href='nowPlaying.view'"> |
||||||
|
</p> |
||||||
|
|
||||||
|
</form:form> |
||||||
|
|
||||||
|
</body> |
||||||
|
</html> |
Loading…
Reference in new issue